
解法
思路和岛屿个数类似,只不过这种需要递归里面返回1的个数,也是上下左右进行深度优先遍历,把遇到的1改成0。
class Solution {
public int maxAreaOfIsland(int[][] grid) {
if (grid.length == 0) {
return 0;
}
int row = grid.length;
int col = grid[0].length;
int maxCount = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (grid[i][j] == 1) {
maxCount = Math.max(dfs(grid, i, j), maxCount);
}
}
}
return maxCount;
}
private int dfs(int[][] grid, int i, int j) {
if (i < 0 || i >= grid.length) {
return 0;
}
if (j < 0 || j >= grid[0].length) {
return 0;
}
// 遇到为1的,改成0
if (grid[i][j] == 1) {
int ans = 1;
grid[i][j] = 0;
int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
for (int[] dir : dirs) {
ans += dfs(grid, i + dir[0], j + dir[1]);
}
return ans;
}
return 0;
}
}
网友评论