200. 岛屿数量

image.png

image.png

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


image.png

在遍历整个矩阵时,如果遇到是1,向东南西北四个方向进行扩散:

(1)观察是否越界
(2)观察如果是0,说明已经到达小岛的边界,就什么也不做
如果是1,就将当前值变为0(这是沉没的概念),再遍历下一个点,不断递归进行之前的上述操作


image.png

可以先往下走,再往右走,再往上走----在遍历时,可以用深度优先遍历,一直走到黑再说
class Solution {
    public int numIslands(char[][] grid) {
        int count=0;
        for(int i=0;igrid.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);
  }
}

你可能感兴趣的:(200. 岛屿数量)