from typing import List class Solution: def closedIsland(self, grid: List[List[int]]) -> int: res = 0 m, n = len(grid), len(grid[0]), for i in range(m): self.dfs(grid, i, 0) self.dfs(grid, i, n - 1) for j in range(n): self.dfs(grid, 0, j) self.dfs(grid, m - 1, j) for i in range(m): for j in range(n): if grid[i][j] == 0: res += 1 self.dfs(grid, i, j) return res pass def dfs(self, grid: List[List[int]], i: int, j: int): m, n = len(grid), len(grid[0]), if i < 0 or j < 0 or i >= m or j >= n: return if 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) pass if __name__ == '__main__': print(Solution().closedIsland( [[1, 1, 1, 1, 1, 1, 1, 0], [1, 0, 0, 0, 0, 1, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0], [1, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0]]))