1254. 统计封闭岛屿的数目 #
- 标签:深度优先搜索、广度优先搜索、并查集、数组、矩阵
- 难度:中等
题目大意 #
描述:给定一个二维矩阵 grid
,每个位置要么是陆地(记号为 0
)要么是水域(记号为 1
)。
我们从一块陆地出发,每次可以往上下左右 4
个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。
如果一座岛屿完全由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为「封闭岛屿」。
要求:返回封闭岛屿的数目。
说明:
- $1 \le grid.length, grid[0].length \le 100$。
- $0 \le grid[i][j] \le 1$。
示例:
- 示例 1:
|
|
- 示例 2:
|
|
解题思路 #
思路 1:深度优先搜索 #
- 从
grid[i][j] == 0
的位置出发,使用深度优先搜索的方法遍历上下左右四个方向上相邻区域情况。- 如果上下左右都是
grid[i][j] == 1
,则返回True
。 - 如果有一个以上方向的
grid[i][j] == 0
,则返回False
。 - 遍历之后将当前陆地位置置为
1
,表示该位置已经遍历过了。
- 如果上下左右都是
- 最后统计出上下左右都满足
grid[i][j] == 1
的情况数量,即为答案。
思路 1:代码 #
|
|
思路 1:复杂度分析 #
- 时间复杂度:$O(m \times n)$。其中 $m$ 和 $n$ 分别为行数和列数。
- 空间复杂度:$O(m \times n)$。