leetcode 695 島嶼的最大面積

2021-08-21 23:43:25 字數 1649 閱讀 4563

給定乙個包含了一些 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,那麼則它周圍的上下左右都要進行遞迴,遞迴終止條件這個位置的數等於0。

有一點需要注意的是,每次找到乙個地方的數為1時,就需要把這個位置的數修改為0不然會進入死迴圈。

我的**如下:

class

solution:

defmaxareaofisland

(self, grid):

""" :type grid: list[list[int]]

:rtype: int

"""defcal

(l,i,j):

c = 1

x = len(l)

y = len(l[0])

l[i][j] = 0

if i-1>=0

and l[i-1][j]: #上

c = c + cal(l,i-1,j)

if j+1

< y and l[i][j+1]: #右

c = c + cal(l,i,j+1)

if i+1

< x and l[i+1][j]: #下

c = c + cal(l,i+1,j)

if j-1>=0

and l[i][j-1]: #左

c = c + cal(l,i,j-1)

return c

lenr = len(grid)

lenc = len(grid[0])

count = 0

result = 0

for i in range(lenr):

for j in range(lenc):

if grid[i][j] == 1:

count = cal(grid,i,j)

result = max(result,count)

return result

LeetCode 695島嶼最大面積

給定乙個包含了一些 0 和 1 的非空二維陣列 grid 乙個 島嶼 是由一些相鄰的 1 代表土地 構成的組合,這裡的 相鄰 要求兩個 1 必須在水平或者豎直方向上相鄰。你可以假設 grid 的四個邊緣都被 0 代表水 包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為 0 示例...

leetcode 695 島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列grid,乙個 島嶼 是由四個方向 水平或垂直 的1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0,0...

LeetCode 695 島嶼的最大面積

給定乙個包含了一些 0 和 1的非空二維陣列grid,乙個島嶼是由四個方向 水平或垂直 的1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0,0,0...