题目:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。
示例:
解答:本题使用递归解法
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
def dfs(grid,i,j):
#在不出界的情况下,如果值为1
if i>=0 and i<m and j>=0 and j<n and grid[i][j] == "1":
grid[i][j] = "0" #将访问过的置为0
#依次遍历上下左右
dfs(grid,i+1,j)
dfs(grid,i-1,j)
dfs(grid,i,j-1)
dfs(grid,i,j+1)
#不是矩阵返回0
if not grid:
return 0
m = len(grid) #行
n = len(grid[0]) #列
count = 0 #计数
for i in range(m): #遍历行
for j in range(n) : #遍历列
if grid[i][j] =="1": #网格值为1
dfs(grid,i,j) #dfs遍历
count += 1
return count
本题错误点:
1.忘了将访问过的置0
2.if not grid 那部分写复杂化了
3.遍历的时候忘写range
4.定义的dfs函数放在后面会报错,因为python调用函数必须先定义才能用,不能先调用后定义,这个要注意顺序。