695. 岛屿的最大面积
- 题号:力扣695
- 知识点:DFS
- 目标完成度:29/150
- 总结
题干:
思路:
- 1.此题关键在于如何将上下左右相连的1建立关联,此处使用深度优先搜索(DFS)解决。
- 2.首先使用双重循环遍历矩阵中的每个元素,如果该元素为1,则以该元素所在的位置为起点,进行深度优先搜索,找到与其相连的1,他们同属于一个岛屿,每次调用深度优先搜索的函数时,岛屿面积加一(
ret[0]+=1
) - 3.每次深度优先搜索递归结束后,
ret[0]
的值就是该岛屿的面积。 - 4.将最大的岛屿面积返回即为答案
# python
class Solution:
def dfs(self, grid, r, c, ret):
nr = len(grid)
nc = len(grid[0])
ret[0] += 1
grid[r][c] = 0
if r-1>=0 and grid[r-1][c] == 1: self.dfs(grid, r-1, c, ret)
if r+1<nr and grid[r+1][c] == 1: self.dfs(grid, r+1, c, ret)
if c-1>=0 and grid[r][c-1] == 1: self.dfs(grid, r, c-1, ret)
if c+1<nc and grid[r][c+1] == 1: self.dfs(grid, r, c+1, ret)
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
max_s = 0
if not len(grid):
return 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 1:
ret=[0]
# 传入的ret list类型,类似C++中的引用
self.dfs(grid, i, j, ret)
max_s = max(max_s, ret[0])
return max_s
参考:
相似题目:leetcode:200. 岛屿数量及题解:leetcode:200. 岛屿数量题解