给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
解题思路
题解中有一个岛屿问题的dfs模板非常值得学习,解题时,判断边界的部分逻辑搞反了导致一直没找到问题
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
res = 0
for x in range(len(grid)):
for y in range(len(grid[0])):
if grid[x][y] == "1":
res += 1
self.dfs(grid, x, y)
return res
def judgeborder(self, grid, x, y):
return 0 <= x < len(grid) and 0 <= y < len(grid[0])
def dfs(self, grid, x, y):
if not self.judgeborder(grid, x, y):
return
if grid[x][y] != "1":
return
else:
grid[x][y] = "2"
self.dfs(grid, x-1, y)
self.dfs(grid, x+1, y)
self.dfs(grid, x, y-1)
self.dfs(grid, x, y+1)