这道题和 岛屿数量 -- 二维矩阵的dfs算法 类似,区别在于不算边缘部分的岛屿,那其实很简单,把上⼀题中那些靠边的岛屿排除掉,剩下的就是「封闭岛屿」了。
关于岛屿的相似题目:
python
class closedIsland:
"""
floodFill 算法
1254. 统计封闭岛屿的数目
https://leetcode.cn/problems/number-of-closed-islands/
"""
def solution(self, grid: List[List[str]]) -> int:
res = 0
m, n = len(grid), len(grid[0])
for j in range(n):
# 先把靠上边的岛屿淹掉
self.dfs_matrix(grid, 0, j)
# 先把靠下边的岛屿淹掉
self.dfs_matrix(grid, m-1, j)
for i in range(m):
# 先把靠左边的岛屿淹掉
self.dfs_matrix(grid, i, 0)
# 先把靠右边的岛屿淹掉
self.dfs_matrix(grid, i, n-1)
# 遍历grid,就是所有的封闭岛屿
for i in range(m):
for j in range(n):
if grid[i][j] == 0:
res += 1
self.dfs_matrix(grid, i, j)
return res
def dfs_matrix(self, grid, i, j):
m, n = len(grid), len(grid[0])
# 跳出递归条件
if i < 0 or i >= m or j < 0 or j >= n:
return
if grid[i][j] == 1:
return
grid[i][j] = 1
self.dfs_matrix(grid, i - 1, j) # 上
self.dfs_matrix(grid, i + 1, j) # 下
self.dfs_matrix(grid, i, j - 1) # 左
self.dfs_matrix(grid, i, j + 1) # 右