題目:
給定乙個包含了一些 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。
解題思路:
典型的dfs題,最直接的思路就是挨個遍歷,然後計算結果,當周圍是0或者出了矩陣範圍時就終止此次遍歷。
這裡面上下左右是滿足要求的下一步,所以存在重複遍歷問題,因此,我們需要把遍歷過的點置0,這樣在下乙個點回到此位置時,不會重複計算此位置。
思路很簡單,如下。
class
solution
}return res;
}int
sidewithside
(vectorint>>
& grid,
int row,
int col,
int rows,
int cols)
;//定義四個方向
int dy[4]
=;int ans=1;
//此位置加入面積
for(
int k=
0;k<
4;k++
)return ans;}}
;
遞迴演算法自然可以轉化為迴圈方式,分析此題其實是要遍歷上下左右四個方向,所以需要有容器儲存,其實棧可以理解為遞迴,不斷分解為子問題,一層層解決,最後是棧底的大問題。所以我們用棧來將遞迴改寫為迴圈。
class
solution
;//四個方向
int dy[4]
=;for(
int k=
0;k<
4;k++)}
res=
max(res,tmp)
;//每一次都儲存最後的結果}}
return res;}}
;
島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...
島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...
島嶼的最大面積
695.島嶼的最大面積 給定乙個包含了一些 0 和 1的非空二維陣列grid,乙個島嶼是由四個方向 水平或垂直 的1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0...