本题是经典的做题步骤,1.定义保存结果的变量。2.特殊情况处理。3.循环+分支(循环中需要处理特殊情况)得出结果
var islandPerimeter = function(grid) {
// 定义保存周长的变量
let girth=0
// 特殊情况处理
if(!grid.length){
return 0
}
// 定义保存四个边长的变量
let a=b=c=d=0
// 循环+分支处理,周长就是从四个不同方向的投影长度
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]===1){
// 这里用else if要分16种,全用if只要四种,认清判断条件之间是否能同时成立,选择不同的分支语句
// 下面四个判断都要先判断是否为边界的情况
// 右边有陆地
if(j<grid[0].length-1){
if(grid[i][j+1]===1){
d--
}
}
// 左边有陆地
if(j>0){
if(grid[i][j-1]===1){
c--
}
}
// 下边有陆地
if(i<grid.length-1){
if(grid[i+1][j]===1){
b--
}
}
// 上边有陆地
if(i>0){
if(grid[i-1][j]===1){
a--
}
}
a++;b++;c++;d++
}
}
}
girth=a+b+c+d
return girth
};
时间复杂度O(mn),m是网格长度,n是网格宽度,需要常数空间存放若干变量,空间复杂度为O(1)