1254. 统计封闭岛屿的数目.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from typing import List
  2. class Solution:
  3. def closedIsland(self, grid: List[List[int]]) -> int:
  4. res = 0
  5. m, n = len(grid), len(grid[0]),
  6. for i in range(m):
  7. self.dfs(grid, i, 0)
  8. self.dfs(grid, i, n - 1)
  9. for j in range(n):
  10. self.dfs(grid, 0, j)
  11. self.dfs(grid, m - 1, j)
  12. for i in range(m):
  13. for j in range(n):
  14. if grid[i][j] == 0:
  15. res += 1
  16. self.dfs(grid, i, j)
  17. return res
  18. pass
  19. def dfs(self, grid: List[List[int]], i: int, j: int):
  20. m, n = len(grid), len(grid[0]),
  21. if i < 0 or j < 0 or i >= m or j >= n:
  22. return
  23. if grid[i][j] == 1:
  24. return
  25. grid[i][j] = 1
  26. self.dfs(grid, i + 1, j)
  27. self.dfs(grid, i - 1, j)
  28. self.dfs(grid, i, j + 1)
  29. self.dfs(grid, i, j - 1)
  30. pass
  31. if __name__ == '__main__':
  32. print(Solution().closedIsland(
  33. [[1, 1, 1, 1, 1, 1, 1, 0],
  34. [1, 0, 0, 0, 0, 1, 1, 0],
  35. [1, 0, 1, 0, 1, 1, 1, 0],
  36. [1, 0, 0, 0, 0, 1, 0, 1],
  37. [1, 1, 1, 1, 1, 1, 1, 0]]))