题目描述
给你一个由 1(陆地)
和0(水)
组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
输入输出
1 | 输入:grid = [ |
基本思路
深度优先搜索 经过的数组修改为2 时复$O(MN)$ 空复$O(MN)$
广度优先搜索 :
为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为
1
,则将其加入队列,开始进行广度优先搜索。在广度优先搜索的过程中,每个搜索到的1
都会被重新标记为1
。直到队列为空,搜索结束。最终岛屿的数量就是我们进行广度优先搜索的次数。
时复$O(MN)$ 空复$O(min(M, N))$ 空复:最坏情况下均为陆地 队列大小的值
java实现
1 | // 深搜 会修改二维数组中的值 |