剑指 Offer II 105. 岛屿的最大面积
这里采用沉岛思维,就是经过的岛就将其修改为
0,注意和回溯算法区分开(回溯算法需要复原现场,而这里是不需要的)。因为连通的岛屿必须只属于某一部分。 ```java class Solution { public int maxAreaOfIsland(int[][] grid) {if (grid == null) return 0;int row = grid.length, col = grid[0].length;int maxArea = Integer.MIN_VALUE;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (grid[i][j] == 1) {maxArea = Math.max(maxArea, dfs(grid, i, j));}}}return maxArea == Integer.MIN_VALUE ? 0 : maxArea;
}
// 以 (row, col) 向四周扩散求最大面积 private int dfs(int[][] grid, int row, int col) {
// 边界判断 if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == 0) { return 0; } // 判断位置是否经过 grid[row][col] = 0; int a = dfs(grid, row - 1, col); // 上 int b = dfs(grid, row + 1, col); // 下 int c = dfs(grid, row, col - 1); // 左 int d = dfs(grid, row, col + 1); // 右 // grid[row][col] = 1; return a + b + c + d + 1;}
} ```
