給定乙個包含了一些 0 和 1的非空二維陣列grid
, 乙個島嶼是由四個方向 (水平或垂直) 的1
(代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。
找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為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
。
注意:給定的矩陣grid
的長度和寬度都不超過 50。
1. dfs(pos_x,pos_y) 函式通過遞迴在陸地上移動
2. 通過self.count來記錄陸地的數量
classsolution(object):
def__init__
(self):
self.count =0
defmaxareaofisland(self, grid):
""":type grid: list[list[int]]
:rtype: int
"""def
dfs(pos_x,pos_y):
if pos_x<0 or pos_x>=len(grid) or pos_y<0 or pos_y>=len(grid[0]):
return
if idx[pos_x][pos_y] == 1 or grid[pos_x][pos_y]==0:
return
self.count+=1idx[pos_x][pos_y] = 1
for mv_ in
move_:
dfs(pos_x + mv_[0],pos_y + mv_[1])
idx = [[0 for x in range(len(grid[0])) ] for y in
range(len(grid)) ]
move_ = [(-1,0),(0,-1),(0,1),(1,0)]
ans =0
for x in
range(len(grid)):
for y in
range(len(grid[0])):
self.count =0
dfs(x,y)
ans =max(ans,self.count)
return ans
1. 構造乙個二維陣列的方法 : matrix = [[0 in range(5)] in range(5)]
2. 通過公共變數self.count來儲存遞迴的中間值。(那麼如何用return來返回遞迴的中間值呢?)
3. for mv_ inmove_: dfs(pos_x + mv_[0],pos_y + mv_[1])
這一句可以這樣寫更簡潔
for mi, mj in move_:pass
4. 我的思路中用了額外的空間 idx來記錄訪問的情況,題解的處理方法是把訪問過的陸地(1) 改成 海洋(0) 。降低了空間複雜度。
classsolution:
defdfs(self, grid, cur_i, cur_j):
if cur_i < 0 or cur_j < 0 or cur_i == len(grid) or cur_j == len(grid[0]) or grid[cur_i][cur_j] != 1:
return
0 grid[cur_i][cur_j] =0
ans = 1
for di, dj in [[0, 1], [0, -1], [1, 0], [-1, 0]]:
next_i, next_j = cur_i + di, cur_j +dj
ans +=self.dfs(grid, next_i, next_j)
return
ans
def maxareaofisland(self, grid: list[list[int]]) ->int:
ans =0
for i, l in
enumerate(grid):
for j, n in
enumerate(l):
ans =max(self.dfs(grid, i, j), ans)
return ans
1. 注意題解中儲存遞迴結果的方法。
力扣 島嶼的周長
給定乙個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。網格中的格仔水平和垂直方向相連 對角線方向不相連 整個網格被水完全包圍,但其中恰好有乙個島嶼 或者說,乙個或多個表示陸地的格仔相連組成的島嶼 島嶼中沒有 湖 湖 指水域在島嶼內部且不和島嶼周圍的水相連 格仔是邊長為 1 的正...
力扣 島嶼的周長
給定乙個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。網格中的格仔水平和垂直方向相連 對角線方向不相連 整個網格被水完全包圍,但其中恰好有乙個島嶼 或者說,乙個或多個表示陸地的格仔相連組成的島嶼 島嶼中沒有 湖 湖 指水域在島嶼內部且不和島嶼周圍的水相連 格仔是邊長為 1 的正...
力扣LeetCode 島嶼數量
給定乙個由 1 陸地 和 0 水 組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。示例 1 輸入 11110 11010 11000 00000 輸出 1 示例 2 輸入 11000 11000 00100 0...