DFS
Python
思路:先外后内,先遍历边界,再处理内部!!!
class Solution:
def closedIsland(self, grid: List[List[int]]) -> int:
res = 0
m, n = len(grid), len(grid[0])
for i in range(m): # 先遍历边界0, 并置1
for j in range(n):
if (i == 0 or i == m-1 or j == 0 or j == n-1) and grid[i][j] == 0:
self.dfs(grid, i, j)
for i in range(m): # 再遍历内部0, 都是封闭岛
for j in range(n):
if grid[i][j] == 0:
self.dfs(grid, i, j)
res += 1
return res
def dfs(self, grid, i, j):
if (i < 0 or i >= len(grid)
or j < 0 or j >= len(grid[0])
or grid[i][j] == 1):
return
grid[i][j] = 1
self.dfs(grid, i-1, j)
self.dfs(grid, i+1, j)
self.dfs(grid, i, j+1)
self.dfs(grid, i, j-1)