岛屿数量
dfs解法,图的问题可以看出复杂的二叉树,遍历的时候为了记录已经遍历过,可以使用一个数组来表示,也可以将遍历的元素改成一个无关的值:
class Solution:
def dfs(self,i,j,grid,flag):
flag[i][j] = 0
if i-1>=0:
if grid[i-1][j] == "1" and flag[i-1][j] == 1:
self.dfs(i-1,j,grid,flag)
if i+1<len(grid):
if grid[i+1][j] == "1" and flag[i+1][j] == 1:
self.dfs(i+1,j,grid,flag)
if j-1>=0:
if grid[i][j-1] == "1" and flag[i][j-1] == 1:
self.dfs(i,j-1,grid,flag)
if j+1 < len(grid[i]):
if grid[i][j+1] == "1" and flag[i][j+1] == 1:
self.dfs(i,j+1,grid,flag)
def numIslands(self, grid: List[List[str]]) -> int:
flag = []
n = 0
for i in range(len(grid)):
flag.append([1]*len(grid[i]))
for i in range(len(grid)):
for j in range(len(grid[i])):
if grid[i][j] == "1" and flag[i][j] == 1:
self.dfs(i,j,grid,flag)
n += 1
return n