1、题目描述
https://leetcode-cn.com/problems/max-area-of-island/
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0
)
对于上面这个给定矩阵应返回 6。注意答案不应该是 11 ,因为岛屿只能包含水平或垂直的四个方向的 1 。
2、代码详解
class Solution(object):
def maxAreaOfIsland(self, arr):
m = len(arr)
if m == 0:
return 0
n = len(arr[0])
res = 0
def dfs(i, j):
# 结束条件
if i < 0 or i >= m or j < 0 or j >= n:
return 0
if arr[i][j] == 0:
return 0
arr[i][j] = 0
# 上
top = dfs(i + 1, j)
# 下
bottom = dfs(i - 1, j)
# 左
left = dfs(i, j - 1)
# 右
right = dfs(i, j + 1)
return sum([top, bottom, left, right]) + 1
for i in range(m):
for j in range(n):
res = max(dfs(i, j), res)
return res
- 时间复杂度:O(R * C)。其中 R 是给定网格中的行数,C 是列数。我们访问每个网格最多一次。
- 空间复杂度:O(R * C),递归的深度最大可能是整个网格的大小,因此最大可能使用 O(R * C) 的栈空间。