问题
例子
思路
类似:79. 单词搜索_面试题12. 矩阵中的路径_面试题13. 机器人的运动范围
-
方法1
遍历二维数组,当前位置为‘1’,表明是个新的岛屿,结果数量+1,然后把该岛变成水
-
方法2
代码
//方法1
class Solution {
public int numIslands(char[][] grid) {
if(grid.length==0) return 0;
int res = 0;
for(int i=0; i<grid.length; i++) {
for(int j=0; j<grid[0].length; j++) {
//发现新岛屿,旧岛屿都变成水了(为0了)
if(grid[i][j]=='1'){
res++;
//把这个块所在的岛屿变成水,感染成水
infect(grid, i, j);
}
}
}
return res;
}
public void infect(char[][] grid, int i, int j) {
if(i<0 || i>grid.length-1 || j<0 || j>grid[0].length-1 || grid[i][j]=='0')
return;
grid[i][j]='0';//变成水
infect(grid,i-1,j);
infect(grid,i+1,j);
infect(grid,i,j-1);
infect(grid,i,j+1);
}
}
//方法2