问题描述:给出一个二维整数网格形式的地图,其中1表示土地,0表示水。 网格单元水平/垂直(不对角线)连接。 网格完全被水包围,并且正好有一个岛(即,一个或多个连接的地面细胞)。 岛上没有“湖泊”(水内没有连接到岛上的水)。 一个单元格是具有边长为1的正方形。网格为矩形,宽度和高度不超过100,确定岛的周长。
[[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]] Answer: 16 Explanation: The perimeter is the 16 yellow stripes in the image below:解析思路:看到此题时,首先想到的思路是从整体有多少行,多少列,再去考虑小方块之间有几个有粘连情况,但是在解决粘连这部分时仍需要去遍历,这反而使得问题变得复杂;从另一种思路去考虑,去考虑每个个体的边的情况,那么每个方块的露在外边的边长为4减去这个方块连接的方块的个数,然后对每个方块进行遍历,进而得到总周长。
代码部分:
/**
* @param {number[][]} grid
* @return {number}
*/
var islandPerimeter = function(grid) {
var sum = 0;
for(var i=0; i<grid.length; i++){
for(var j=0; j<grid[i].length; j++){
if(grid[i][j] == 1){
var left = j-1 < 0 ? 0 :grid[i][j-1];
var right = j+1 >= grid[i].length ? 0 : grid[i][j+1];
var top = i-1 < 0 ? 0 : grid[i-1][j];
var bottom = i+1 >= grid.length ? 0 : grid[i+1][j];
var num = 4 - (left + right + top + bottom);
sum = sum + num;
}
}
}
return sum;
};