2024-09-01
算法刷题
00

目录

1岛屿数量
2 岛屿中面积最大值

1岛屿数量

在这里插入图片描述

题目很好理解,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)

2 岛屿中面积最大值

在这里插入图片描述

写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
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

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