給定一個包含了一些 0 和 1的非空二維數組 grid , 一個 島嶼 是由四個方向 (水平或垂直) 的 1 (表明土地) 構成的組合。你能夠假設二維矩陣的四個邊緣都被水包圍着。數組
找到給定的二維數組中最大的島嶼面積。(若是沒有島嶼,則返回面積爲0。)spa
示例 1:code
[[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’。io
示例 2:class
[[0,0,0,0,0,0,0,0]]
複製代碼
對於上面這個給定的矩陣, 返回 0。搜索
注意: 給定的矩陣grid 的長度和寬度都不超過 50。grid
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int res = 0;
for( int i = 0; i < grid.length ; i++ ){
for( int j = 0 ; j < grid[0].length ; j++ ){
if( grid[ i ][ j ] == 1 ){
res = Math.max( res , help( grid , i , j ) );
}
}
}
return res;
}
public int help( int[][] grid , int i , int j ){
grid[ i ][ j ] = 0;
int sum = 1 ;
if( i > 0 && grid[ i - 1 ] [ j ] == 1 ){
sum += help( grid , i -1 , j );
}
if( i < grid.length - 1 && grid[ i + 1 ] [ j ] == 1){
sum += help( grid , i + 1 , j );
}
if( j > 0 && grid[ i ] [ j -1 ] == 1 ){
sum += help( grid , i , j - 1 );
}
if( j < grid[0].length - 1 && grid[ i ] [ j + 1 ] == 1){
sum += help( grid , i , j + 1 );
}
return sum;
}
}
複製代碼
解題思路: 對二維數組進行遍歷 , 若是當前點的值位1 , 則進行搜索, 對上下左右四個方向進行搜索, 對值進行疊加, 遍歷後的位置將值至0 , 最後返回最大值便可遍歷