
题目很好理解,dfs来一套即可:
(1)二维的,没考虑特殊情况;
(2)对每个网格dfs,每次dfs往上下左右搜
(3)grid是list,在python里面会是一个全局,第一次搜到记一次搜到了一块岛屿,后面的dfs都是为了扫清上下左右的岛屿;
(4)dfs三要素:
a 如何结束
b 如何递归
c 如何剪枝,这里不需要
python展开代码class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        def dfs(x,y,flagfrist):
            if x<0 or x>=m or y<0 or y>=n:
                return 
            if grid[x][y]=="1":
                if flagfrist==0:
                    res.append(1)
                    flagfrist=1
                grid[x][y]="0"
                dfs(x-1,y,flagfrist)
                dfs(x+1,y,flagfrist)
                dfs(x,y-1,flagfrist)
                dfs(x,y+1,flagfrist)
        m=len(grid)
        n=len(grid[0])
        res=[]
        for i in range(m):
            for j in range(n):
                dfs(i,j,0)
        return len(res)

写dfs,把重点放在结束条件和如何递归上,多考虑搜索数结构,
能定义为全局变量的就定义为全局变量,需要往下一级递归的变量才定义为dfs函数的参数,不然会陷入乱糟糟的传参中!
python展开代码class Solution:
    def maxAreaOfIsland(self, grid: List[List[str]]) -> int:
        def dfs(x,y):
            if x<0 or x>=m or y<0 or y>=n:
                return 
            if grid[x][y]==1:
                area.append(1)
                grid[x][y]=0
                dfs(x-1,y)
                dfs(x+1,y)
                dfs(x,y-1)
                dfs(x,y+1)
        m=len(grid)
        n=len(grid[0])
        res=0
        for i in range(m):
            for j in range(n):
                area=[]
                dfs(i,j)
                res=max(len(area),res)
        return res


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!