给你一个大小为 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; }}