遍历一遍数组,当找到数组元素是1的话,就将这个封闭空间的数全部变成2,岛屿数加1,直到遍历完数组。
var numIslands = function(grid) {
let num = 0;
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]==='1'){
modifyGridItemToTwo(grid,i,j);
num++;
}
}
}
return num;
};
function modifyGridItemToTwo(arr,i,j){
if(i<0||i>=arr.length)return;
if(j<0||j>=arr[0].length)return;
if(arr[i][j]!='1')return;
arr[i][j] = '2';
modifyGridItemToTwo(arr,i+1,j);
modifyGridItemToTwo(arr,i-1,j);
modifyGridItemToTwo(arr,i,j+1);
modifyGridItemToTwo(arr,i,j-1);
}
还有几道十分类似的题目,我们来趁热打铁写一下。
var islandPerimeter = function(grid) {
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]===1){
return getGridIslandPerimeter(grid,i,j);
}
}
}
};
function getGridIslandPerimeter(grid,i,j){
if(i<0||i>=grid.length||j<0||j>=grid[0].length||grid[i][j]!=1)return 0;
grid[i][j] = 2;
const length = judgeIsZero(grid,i-1,j) + judgeIsZero(grid,i+1,j)
+ judgeIsZero(grid,i,j-1) + judgeIsZero(grid,i,j+1);
return length + getGridIslandPerimeter(grid,i-1,j)
+ getGridIslandPerimeter(grid,i+1,j)
+ getGridIslandPerimeter(grid,i,j+1)
+ getGridIslandPerimeter(grid,i,j-1);
}
function judgeIsZero(grid,i,j){
if(i<0||i>=grid.length||j<0||j>=grid[0].length)return 1;
return grid[i][j] === 0 ? 1 : 0;
}
var maxAreaOfIsland = function(grid) {
let result = 0;
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]===1){
result = Math.max(result, maxIsland(grid,i,j));
}
}
}
return result;
};
function maxIsland(grid, i,j){
if(i<0||i>=grid.length||j<0||j>grid[0].length||grid[i][j]!==1)return 0;
grid[i][j] = 2;
return 1 +
maxIsland(grid,i+1,j) +
maxIsland(grid,i-1,j) +
maxIsland(grid,i,j+1) +
maxIsland(grid,i,j-1);
}