

只能是水平或竖直来进行切割小岛

在遍历整个矩阵时,如果遇到是1,向东南西北四个方向进行扩散:
(1)观察是否越界
(2)观察如果是0,说明已经到达小岛的边界,就什么也不做
如果是1,就将当前值变为0(这是沉没的概念),再遍历下一个点,不断递归进行之前的上述操作

可以先往下走,再往右走,再往上走----在遍历时,可以用深度优先遍历,一直走到黑再说
class Solution {
public int numIslands(char[][] grid) {
int count=0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]=='1'){
count++;
dfs(i,j,grid);
}
}
}
return count;
}
void dfs(int i,int j,char[][] grid){
if(i<0||i>grid.length-1||j<0||j>grid[0].length-1||grid[i][j]=='0'){//发生越界,或为0,直接返回
return ;
}
grid[i][j]='0';//沉没陆地
dfs(i-1,j,grid);//向上递归
dfs(i+1,j,grid);
dfs(i,j-1,grid);
dfs(i,j+1,grid);
}
}
网友评论