class Solution:
def helper(self,grid,i,j):
if i<0 or j<0 or i>=len(grid) or j>=len(grid[0]) or grid[i][j]==0:
return 0
grid[i][j]=0
count=1
tmp = [[1,0],[-1,0],[0,1],[0,-1]]
for x,y in tmp:
dx = x+i
dy = y+j
count+=self.helper(grid,dx,dy)
return count
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
res = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j]==1:
tmp = self.helper(grid,i,j)
res = max(tmp,res)
return res
这个题目的简单版本就是求解有多少个岛屿,也就是有多少个连通的1,不管用DFS和BFS都可以进行求解。这个题目就是在岛屿数量基础上加了一个面积的计算,那么一个岛屿都是以单位面积为1的正方形拼接起来的几何图形,所以每次在计算岛屿数量的过程中把出现多少个正方形的和计算起来就可以了,这个多少正方形也就是指的面积是多少,然后不断更新最大面积就可以求出最大面积的岛屿了。
总结:岛屿问题近乎都是可以采用DFS和BFS进行求解的,不过有时候稍微进行一些变体,大的方向都是完全相同的。都是采用基本的模板。