From a1e32680ac4e314969dbf7578caac5b7e80b3aa2 Mon Sep 17 00:00:00 2001 From: jerryfishcode <91447694+jerryfishcode@users.noreply.github.com> Date: Mon, 27 Sep 2021 16:40:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20463.=E5=B2=9B=E5=B1=BF?= =?UTF-8?q?=E7=9A=84=E5=91=A8=E9=95=BF=20JavaScript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0463.岛屿的周长.md | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/problems/0463.岛屿的周长.md b/problems/0463.岛屿的周长.md index fd9585d2..e6077456 100644 --- a/problems/0463.岛屿的周长.md +++ b/problems/0463.岛屿的周长.md @@ -120,6 +120,55 @@ Python: Go: JavaScript: +```javascript +//解法一 +var islandPerimeter = function(grid) { + // 上下左右 4 个方向 + const dirx = [-1, 1, 0, 0], diry = [0, 0, -1, 1]; + const m = grid.length, n = grid[0].length; + let res = 0; //岛屿周长 + for(let i = 0; i < m; i++){ + for(let j = 0; j < n; j++){ + if(grid[i][j] === 1){ + for(let k = 0; k < 4; k++){ //上下左右四个方向 + // 计算周边坐标的x,y + let x = i + dirx[k]; + let y = j + diry[k]; + // 四个方向扩展的新位置是水域或者越界就会为周长贡献1 + if(x < 0 // i在边界上 + || x >= m // i在边界上 + || y < 0 // j在边界上 + || y >= n // j在边界上 + || grid[x][y] === 0){ // (x,y)位置是水域 + res++; + continue; + } + } + } + } + } + return res; +}; + +//解法二 +var islandPerimeter = function(grid) { + let sum = 0; // 陆地数量 + let cover = 0; // 相邻数量 + for(let i = 0; i < grid.length; i++){ + for(let j = 0; j = 0 && grid[i-1][j] === 1) cover++; + // 统计左边相邻陆地 + if(j - 1 >= 0 && grid[i][j-1] === 1) cover++; + // 为什么没统计下边和右边? 因为避免重复计算 + } + } + } + return sum * 4 - cover * 2; +}; +``` -----------------------