SSL的LeetCode初步刷题记

岁酱吖の 提交于 2020-01-19 13:53:13

岛屿数量

是否独立完成:否

答案出处:题解

思路:首先遍历数组

  1. 当某个数组值为“1”,则表明找到一个岛或者一个岛的一部分了,接着我们需要知道该元素的上下左右,是否也都为“1”,于是我们要访问该元素的上下左右的元素,同理,我们也要对该元素的上下左右元素,做与之前相同的事。
  2. 当某个数组值为“0”,直接跳过下一个。
  3. 注意不要碰到数组的边界
class Solution {
    public void dfs(char[][] grid,int r,int c){ 
        int nr=grid.length;  
        int nc=grid[0].length;
        
        if(r<0||c<0||r>=nr||c>=nc||grid[r][c]=='0') return; //排除四种情况,则退出,r和c显然不能小于0,这是左边界,
        //再者r和c显然,不能大于等于他们的自己的最大值,这是右边界
        grid[r][c]='0'; //走过的岛,全部置位0,表明已经访问过。
        dfs(grid, r-1, c);
        dfs(grid, r+1, c);
        dfs(grid, r, c+1);
        dfs(grid, r, c-1);
    }
    
    public int numIslands(char[][] grid) {
        if(grid!=null&&grid.length==0) return  0; //首先排除grid为0的情况
        int nr=grid.length;  //竖着的的长度
        int nc=grid[0].length; //横着的的长度
        int count=0; //计数,总共有多少独立的岛屿
        for(int r=0;r<nr;r++){//一行一行的遍历
            for (int c=0;c<nc;c++){ 
                if(grid[r][c]=='1') { //等于1的时候进入dfs函数
                    count++;
                    dfs(grid, r, c); 
                }
            }
        }
      return  count;
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!