1、题目描述
给你一个大小为 m x n
的二进制矩阵 grid
。
岛屿 是由一些相邻的 1
(代表土地) 构成的组合,这里的「相邻」要求两个 1
必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid
的四个边缘都被 0
(代表水)包围着。
岛屿的面积是岛上值为 1
的单元格的数目。
计算并返回 grid
中最大的岛屿面积。如果没有岛屿,则返回面积为 0
。
示例 1:
输入:grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] 输出:6 解释:答案不应该是 11,因为岛屿只能包含水平或垂直这四个方向上的 1 。
2、初始思路
2.1 思路
岛屿的面积表示为一块陆地上的格子的数目,参考【leetcode100】岛屿数量-CSDN博客中对网格类问题的dfs方法,可得将每次访问到的一块陆地上的格子相加即可得到该岛屿的面积。通过比较每次遍历的陆地的结果,可以得到最大岛屿面积。
return (1 + dfs(r+1, c)+ dfs(r-1, c)+ dfs(r, c+1)+ dfs(r, c-1))
2.2 完整代码
class Solution:def maxAreaOfIsland(self, grid: List[List[int]]) -> int:m,n = len(grid), len(grid[0])def dfs(r,c ):if r<0 or c<0 or r >= m or c >= n or grid[r][c]!=1:return 0grid[r][c] = 2return (1 + dfs(r+1, c)+ dfs(r-1, c)+ dfs(r, c+1)+ dfs(r, c-1))res = 0for i in range(m):for j in range(n):if grid[i][j] == 1:a = dfs(i, j)res = max(res, a)return res