題目出處
難度
medium
題目分類
Array, DFS, Matrix
2026-07-24 一刷
個人範例程式碼 - 一刷 (2026/07/24)
class Solution:
def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
if not grid or not grid[0]: # edge: [], [[]]
return 0
h, w = len(grid), len(grid[0])
max_area = 0
def dfs(grid, i, j):
if i < 0 or i >= h or j < 0 or j >= w or grid[i][j] != 1:
return 0
else: # grid[i][j] == 1:
grid[i][j] = 0
return 1 + dfs(grid, i-1, j) + \
dfs(grid, i, j-1) + \
dfs(grid, i+1, j) + \
dfs(grid, i, j+1)
for i in range(h):
for j in range(w):
if grid[i][j] == 1:
cur_area = dfs(grid, i, j)
max_area = max(max_area, cur_area)
return max_area
算法說明
以 DFS 進行鄰近的搜尋,搜尋到後就修改值代表已經 visited
Time Complexity
O(m*n)
Space Complexity
O(m*n)(DFS 會進行遞迴的最壞情況,可能是一條龍那種,那 stack 深度就會是整張 grid 的面積)
Boundary conditions
- []:not grid 提前 return 0
- [[]]:not grid[0] 提前 return 0
- 處理邊界:i < 0 or i >= h or j < 0 or j >= w,優先排除不合法範圍在進行後續判斷