Number of Closed Islands LeetCode solution in Python
1class Solution:2"""主函数:计算封闭岛屿的数量"""34def closedIsland(self, grid: List[List[int]]) -> int:5result = 06m, n = len(grid), len(grid[0])7self.direction = [[1, 0], [-1, 0], [0, 1], [0, -1]]89# 遍历 grid,处理边缘陆地10for j in range(n):11self.dfs(grid, 0, j)12self.dfs(grid, m - 1, j)13for i in range(m):14self.dfs(grid, i, 0)15self.dfs(grid, i, n - 1)1617# 剩下都是封闭岛屿,遍历找结果18for i in range(m):19for j in range(n):20if grid[i][j] == 0:21result += 122self.dfs(grid, i, j)23return result2425"""从 (i, j) 开始,将与之相邻的陆地都变成海水"""2627def dfs(self, grid, i, j):28m, n = len(grid), len(grid[0])29# 超出索引边界30if i < 0 or j < 0 or i >= m or j >= n:31return32# 已经是海水了33if grid[i][j] == 1:34return35# 变成海水36grid[i][j] = 137for d in self.direction:38x = i + d[0]39y = j + d[1]40self.dfs(grid, x, y)