LeetCode[200]岛屿数量

难度:中等

题目:

给你一个由 '1' (陆地)和 '0' (水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:grid = [

["1","1","1","1","0"],

["1","1","0","1","0"],

["1","1","0","0","0"],

["0","0","0","0","0"]

]

输出:1


示例 2:

输入:grid = [

["1","1","0","0","0"],

["1","1","0","0","0"],

["0","0","1","0","0"],

["0","0","0","1","1"]

]

输出:3


提示:

  • m == grid.length

  • n == grid[i].length

  • 1 <= m, n <= 300

  • grid[i][j] 的值为 '0' 或 '1'


Related Topics

  • 深度优先搜索

  • 广度优先搜索

  • 并查集

  • 数组

  • 矩阵


重点!!!解题思路

第一步:

明确解题手段
类似于此种连通性问题均能使用并查集来实现

第二步:

先计算矩阵中有多少个1,如果有两个1能连接起来,那么1的数量就减少
减完后即是岛屿数量

第三步:

如何确定岛屿?
我们只需要遍历到1的时候,看1的右面和下面是否为1即可,不需要4个方向都判断
判断2个方向,使用并查集相连即可

源码:

//并查集
class UnionFind {
    //记录每个节点的根节点
    int[] parent;
    //记录每个子集的节点数
    int[] rank;
    //记录并查集中的联通分量数量
    int count;

    public UnionFind(int n){
        count=n;
        parent=new int[n];
        for (int i=0;i

解答结果:

LeetCode[200]岛屿数量_第1张图片

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧

你可能感兴趣的:(#,算法刷题篇,树结构基础(刷题篇),算法,数据结构,java,leetcode)