美文网首页
leetcode200.岛屿数量

leetcode200.岛屿数量

作者: 憨憨二师兄 | 来源:发表于2020-06-07 11:28 被阅读0次

题目链接

题目描述:

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

 

示例 1:

输入:
11110
11010
11000
00000
输出: 1

示例 2:

输入:
11000
11000
00100
00011
输出: 3

解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

思路:递归

设置一个感染方法,遍历矩阵,当遍历到矩阵当前元素值为‘1’的时候,进入感染方法,感染方法可以让矩阵中的上下左右相邻为‘1’的元素感染变为数值‘2’,岛的数量+1,感染完成后,继续遍历,遍历到2和0的时候跳过,当又遍历到有“1”的元素时继续感染,岛的数量++ ... 代码如下:

class Solution {
    public int numIslands(char[][] grid) {
        if(grid == null || grid.length == 0 || grid[0] == null || grid[0].length == 0){
            return 0;
        }
        int res = 0;
        int row = grid.length;
        int column = grid[0].length;
        for(int i = 0; i < row; ++i){
            for(int j = 0; j < column; ++j){
                if(grid[i][j] == '1'){
                    inject(grid,i,j,row,column);
                    res++;
                }
            }
        } 
        return res;
    }

    private void inject(char[][] grid,int i,int j,int row,int column){
        if(i < 0 || i >= row || j < 0 || j >= column || grid[i][j] != '1'){
            return;
        }
        grid[i][j] = '2';
        inject(grid,i + 1,j,row,column);
        inject(grid,i - 1,j,row,column);
        inject(grid,i,j + 1,row,column);
        inject(grid,i,j - 1,row,column);
    }
}

时间复杂度:O(M * N), 该算法的时间复杂度为矩阵的面积,其中M和N分别为矩阵的row与column

额外空间复杂度:O(M * N),试想当整个矩阵都是字符'1'组成的时候,也就是岛屿连成了一片的时候,递归的深度为M*N,所以额外空间复杂度为O(M * N)

代码执行结果:


对于这道题目还有更深层次的理解,可以参考我的文章并查集

相关文章

  • leetcode200.岛屿数量

    题目链接 题目描述: 思路:递归 设置一个感染方法,遍历矩阵,当遍历到矩阵当前元素值为‘1’的时候,进入感染方法,...

  • 2019-08-20 LeetCode200. 岛屿数量

    1.第一次不知道为啥执行错误,本地运行大数据迭代深度超过2.check的时候忘记检查=13.有特殊情况的,必须上下...

  • 岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或...

  • 岛屿数量

    题目描述:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,...

  • 岛屿数量

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/numb...

  • 岛屿数量

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number...

  • 岛屿数量

    题目描述 https://leetcode-cn.com/problems/number-of-islands/ ...

  • 岛屿数量

    题目 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平...

  • 岛屿数量

    题目: 题目的理解: 1相邻的是一个岛屿,遍历数组,当碰到1则记录一个岛屿A,然后将1相连的1都设置为2,说明已经...

  • leecode岛屿数量

    题目描述可用解法DFS 深度优先遍历BFS 广度优先遍历算法思路:下列代码用BFS,循环遍历输入的二维列表如果遇到...

网友评论

      本文标题:leetcode200.岛屿数量

      本文链接:https://www.haomeiwen.com/subject/pwtctktx.html