LeetCode 200. Number of Islands

题目

LeetCode 200. Number of Islands
LeetCode 200. Number of Islands

思路

回溯,递归函数的作用是把和当前陆地相邻的陆地都标为false。

代码

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        m = len(grid)
        if m == 0:
            return 0
        n = len(grid[0])
        res = 0
        visited = [[0 for i in range(n)] for j in range(m)]
        for i in range(m):
            for j in range(n):
                if visited[i][j] == 0 and grid[i][j] == '1':
                    res += 1
                    self.dfs(grid,i,j,visited)
        return res
    
    def dfs(self,grid,x,y,visited):
        m = len(grid)
        n = len(grid[0])        
        d = [[0,1],[1,0],[-1,0],[0,-1]]
        visited[x][y] = 1
        for i in range(4):
            newx = x + d[i][0]
            newy = y + d[i][1]
            if self.inarea(newx,newy,m,n) and visited[newx][newy] == 0 and grid[newx][newy] == '1':
                self.dfs(grid,newx,newy,visited)
        return
        
    def inarea(self,x,y,m,n):
        if 0<=x<m and 0<=y<n:
            return True
        return False