我们定义三个全局变量
第一个是self.grid 在最开始输入grid时copy成全局变量方便调用
第二个是self.has_pass
这是一个set
表征之前所有经过的点
第三个是self.tempindex
表征当前已经有了多少块岛屿
class Solution:
def __init__(self):
self.gird = []#即输入list 方便调用
self.has_pass = set()##所有已经经过的点
self.tempindex = 0#目前已有岛屿的数量
def numIslands(self, grid: List[List[str]]) -> int:
self.grid = grid
if grid == []:
return 0
self.M = len(grid)
self.N = len(grid[0])
for i in range(self.M):
for j in range(self.N):
if (i,j) not in self.has_pass:
self.func(i,j,i,j)
return self.tempindex
def func(self,x,y,last_x,last_y):
if (x,y) in self.has_pass or x >= self.M or x < 0 or y >= self.N or y < 0 or (self.grid[x][y] == "0"):#对于已经经过的点 或位置索引超出范围的点 或 水,不处理
return 0
# 找到了一块陆地,看看如果它DFS上一层的岛屿已经被记录,则不是新陆地
# 否则,是新陆地,数量++
if (last_x,last_y) not in self.has_pass:
self.tempindex += 1
self.has_pass.add((x,y))
self.func(x+1,y,x,y)
self.func(x-1,y,x,y)
self.func(x,y+1,x,y)
self.func(x,y-1,x,y)