島嶼的最大面積

給定一個包含了一些 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 , 最後返回最大值便可遍歷

相關文章
相關標籤/搜索