岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:
11110
11010
11000
00000
输出: 1
示例 2:
输入:
11000
11000
00100
00011
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。
采取遍历的方式,将所有连接的1的点都清零之后加1,之后继续遍历所有的点。
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
var num = 0
var x = grid.length
if(x===0) return 0
var y = grid[0].length
for(var i =0;i<x;i++){
for(var j=0;j<y;j++){
if(grid[i][j] === '1'){ // 这样执行一次就会把与对应那个点相邻的1全部清零
helper(grid,i,j,x,y)
num++
}
}
}
return num
};
function helper(grid,i,j,x,y){ // 把1周围为1的数字全部改成0
if(i<0 || j<0 || i+1>x || j+1>y || grid[i][j] === '0'){ // 找到为0的点就结束
return
}
grid[i][j] = '0';
helper(grid,i-1,j,x,y)
helper(grid,i,j+1,x,y)
helper(grid,i+1,j,x,y)
helper(grid,i,j-1,x,y)
}
执行用时 :76 ms, 在所有 JavaScript 提交中击败了84.19%的用户
内存消耗 :36.4 MB, 在所有 JavaScript 提交中击败了100.00%的用户