1. 题目
2. 思路
- 遍历二维数组,首先判断是否为陆地
- 如果是陆地,周长就加上4(正方形四条边),还要进一步判断当前单元格的下面和右边(因为左边、上面已经计算过了),如果下面和右边都是陆地,周长再减去2(重合部分要算2次)。
- 如果是海洋,不用做处理。
- 最后返回周长即可。
3. 代码实现
/**
* @param {number[][]} grid
* @return {number}
*/
var islandPerimeter = function(grid) {
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]) {
res += 4
if (grid[i][j + 1]) {
// 判断右边是否为陆地
res -= 2
}
if (grid[i + 1] && grid[i + 1][j]) {
// 判断下面是否为陆地(最后一行不用判断下面)
res -= 2
}
}
}
}
return res
};