岛屿数量

2024-01-13T15:25:46.png
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