📅  最后修改于: 2023-12-03 15:26:39.075000             🧑  作者: Mango
有一个二维矩阵 grid
,其中值为 0
表示水域,值为 1
表示陆地。
一个“封闭岛屿”是指这个岛屿完全被水域包围,没有与外界相连。换句话说,在岛屿内部从任意一个陆地单元格都无法到达岛屿的边界。
请编写一个函数来计算给定矩阵中封闭岛屿的数量。
示例:
输入:
[
[1,1,1,1,1,1,1],
[1,0,0,0,0,0,1],
[1,0,1,1,1,0,1],
[1,0,1,0,1,0,1],
[1,0,1,1,1,0,1],
[1,0,0,0,0,0,1],
[1,1,1,1,1,1,1]
]
输出:2
这道题可以使用深度优先搜索(DFS)算法来解决。
def closedIsland(grid: List[List[int]]) -> int:
def dfs(x, y):
if 0 <= x < m and 0 <= y < n and grid[x][y] == 0:
grid[x][y] = 1
dfs(x - 1, y)
dfs(x + 1, y)
dfs(x, y - 1)
dfs(x, y + 1)
m, n = len(grid), len(grid[0])
# 从边界陆地出发遍历
for i in range(m):
dfs(i, 0)
dfs(i, n - 1)
for j in range(n):
dfs(0, j)
dfs(m - 1, j)
res = 0
# 统计封闭岛屿的数量
for i in range(1, m - 1):
for j in range(1, n - 1):
if grid[i][j] == 0:
dfs(i, j)
res += 1
return res
时间复杂度: $O(mn)$,其中 $m$ 和 $n$ 分别是矩阵的长度和宽度。需要遍历矩阵四个边界,以及所有未访问的陆地。
空间复杂度: $O(mn)$。当所有陆地都达到了边界或被标记为已访问时,递归的深度将达到 $mn$。