LeetCode 695
https://leetcode.cn/problems/max-area-of-island/
DFS解法
def maxAreaOfIsland(grid: List[List[int]]) -> int:
"""
求解岛屿的最大面积
:param grid: 给定矩阵, 1表示岛屿,0表示水域
:return: 最大面积
"""
# 初始化最大面积
max_area = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
# 当前点是岛屿
if grid[i][j] == 1:
# 求解当前岛屿面积
area = dfs(grid, i, j)
# 更新最大面积
max_area = max(max_area, area)
return max_area
def dfs(grid: List[List[int]], i: int, j: int) -> int:
"""
使用深度优先搜索求解岛屿面积
:param grid: 给定矩阵
:param i: 当前点横坐标
:param j: 当前点纵坐标
:return: 岛屿面积
"""
# 当前点越界或不是岛屿,返回0
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1:
return 0
# 标记当前点已经访问过
grid[i][j] = 0
# 求解上下左右四个方向的岛屿面积
area = 1 + dfs(grid, i + 1, j) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i, j - 1)
return area
上述代码使用了深度优先搜索来求解岛屿面积,主要思路是遍历整个矩阵,对于每个是岛屿的点,使用dfs函数求解其上下左右四个方向的岛屿面积,并将遍历过的点标记为已经访问过。
在每次调用dfs函数时,会计算上下左右四个方向的岛屿面积,并将结果累加到当前点的岛屿面积上。在遍历完整个矩阵后,得到的最大面积即为答案。
由于dfs函数需要遍历整个矩阵,时间复杂度为 O(m*n),m为矩阵行数,n为矩阵列数。空间复杂度为O(1),因为并不需要额外空间来存储搜索过程中产生的状态。
博客介绍了 LeetCode 695 题使用深度优先搜索(DFS)求解岛屿面积的方法。主要思路是遍历矩阵,对岛屿点用 dfs 函数求其上下左右岛屿面积并标记已访问,累加结果。该解法时间复杂度为 O(m*n),空间复杂度为 O(1)。
939





