题目描述
给你一个大小为 m x n 的二进制矩阵 grid 。
岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
岛屿的面积是岛上值为 1 的单元格的数目。
计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0 。
样例描述
思路
DFS FloodFill
- 直接用int型dfs累计即可,不需要用void的。
- 注意判断越界或者碰到不是1直接return 0, 对累加无影响。放在dfs最外面判断,而不是在四个方向遍历中,因为四个方向遍历时要累加的,不能因为碰到0就直接整个返回0。
代码
class Solution {
int[][] g;
int dx[] = new int[]{
1, 0, -1, 0};
int dy[] = new int[]{
0, 1, 0, -1};
int maxArea = 0;
public int maxAreaOfIsland(int[][] grid) {
g = grid;
for (int i = 0; i < g.length; i ++ ) {
for (int j = 0; j < g[0].length; j ++ ) {
if (g[i][j] == 1) {
maxArea = Math.max(maxArea, dfs(i, j));
}
}
}
return maxArea;
}
public int dfs(int x, int y ) {
if (x < 0 || x >= g.length || y < 0 || y >= g[0].length || g[x][y] == 0) {
return 0;
}
g[x][y] = 0;
//设定面积大小为1
int cnt = 1;
for (int d = 0; d < 4; d ++ ) {
int a = x + dx[d], b = y + dy[d];
cnt += dfs(a, b);
}
return cnt;
}
}