给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
示例 1:
输入:grid =
[[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 。
class Solution {
private int max;
public int maxAreaOfIsland(int[][] grid) {
if(grid.length == 0 || grid == null) return 0;
for(int x = 0; x < grid.length; x++){
for(int y = 0; y < grid[0].length; y++){
if(grid[x][y] == 1){
max = Math.max(dfs(grid, x, y),max);
}
}
}
return max;
}
public int dfs(int[][] grid,int x,int y){
if(x >= grid.length || x < 0 || y >= grid[0].length || y < 0
|| grid[x][y] == 0) return 0;
grid[x][y] = 0;
return dfs(grid, x, y+1) + dfs(grid, x, y-1) +
dfs(grid, x+1, y) + dfs(grid, x-1, y) + 1;
}
}