Leetcode 200. 岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
Code
def numIslands(self, grid: List[List[str]]) -> int:
if grid is None or len(grid) == 0:
return 0
island=0
for i in range(0,len(grid),1):# 遍历二维网格的每个元素
for j in range(0,len(grid[i]),1):
if grid[i][j] == "1":
# 如果该元素为"1",那么进行深度优先搜索,
self.dfs(grid,i,j)
island=island+1
return island
def dfs(self, grid: List[List[str]], i: int, j: int) -> int:
if i<0 or i>=len(grid) or j<0 or j>=len(grid[i]) or grid[i][j] == "0" or grid is None:
return
grid[i][j] = "0"#然后将其置为0
self.dfs(grid, i + 1, j)
self.dfs(grid, i - 1, j)
self.dfs(grid, i, j + 1)
self.dfs(grid, i, j - 1)
想法
1.找到该岛屿所有连接的土地,遍历中可能遇到遍历过的结点,所以将其置为0。