思路: 深度遍历
1.第一层main函数里 两层循环找 grid[x][y] == '1' 的点 res += 1
2.递归函数里,把与该点四个方向相邻的,值为‘1’的点全部标0
标0方法: 对坐标(x,y)四个方向中 值 == ‘1’ 的赋0 再递归。
注意:
1. 对于二维数组,判空要用 if len( grid ) == 0: return 0
我之前的错误用法是 if not grid: return 0
因为即使空的二维数组 也是 [ [ ] ]
代码:
class Solution:
def numIslands(self, grid: List[List[str]]) -> int:
def set_to_zero(row,col,grid):
grid[row][col] = '0'
dirs = [(row,col-1),(row-1,col),(row+1,col),(row,col+1)]
nr = len(grid)
nc = len(grid[0])
for x,y in dirs:
if 0<=x<nr and 0<=y<nc and grid[x][y] == '1':
set_to_zero(x,y,grid)
if not grid or len(grid[0]) == 0:
return 0
res = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == '1':
res+=1
set_to_zero(i,j,grid)
return res