200. 岛屿数量

2020-07-14  本文已影响0人  bangbang2
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;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);
  }
}
上一篇 下一篇

猜你喜欢

热点阅读