给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
示例 1:
[[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:
[[0,0,0,0,0,0,0,0]]
对于上面这个给定的矩阵, 返回 0。
链接:https://leetcode.com/problems/max-area-of-island/
解题思路:同类题463.岛屿的周长
对每个未遍历的岛屿进行深度优先遍历,遍历过后进行标记,然后递归的遍历该岛屿的四周,面积累加,记录最大值。
我的代码:
class Solution(object):
def maxAreaOfIsland(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
# 深度优先
if not grid:
return 0
row = len(grid)
col = len(grid[0])
res = 0
for r in range(row):
for c in range(col):
if grid[r][c] == 1:
res = max(res, self.dfs(r, c, row, col, grid))
return res
def dfs(self, r, c, row, col, grid):
if not (0 <= r < row and 0 <= c < col):
return 0
if grid[r][c] != 1:
return 0
# 已遍历
grid[r][c] = 2
return 1 + self.dfs(r - 1, c, row, col, grid) + self.dfs(r + 1, c, row, col, grid) + self.dfs(r, c - 1, row, col, grid) + self.dfs(r, c + 1, row, col, grid)
Time: O(R×C)
Space:O(R×C)
难度:中等