题目很好理解,dfs来一套即可:
(1)二维的,没考虑特殊情况;
(2)对每个网格dfs,每次dfs往上下左右搜
(3)grid是list,在python里面会是一个全局,第一次搜到记一次搜到了一块岛屿,后面的dfs都是为了扫清上下左右的岛屿;
(4)dfs三要素:
a 如何结束
b 如何递归
c 如何剪枝,这里不需要
pythonclass 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函数的参数,不然会陷入乱糟糟的传参中!
pythonclass 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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!