自己没有写出来,自己想的是循环遍历,没有想到DFS递归和沉岛(添加了以后grid[i][j] = 0)的思想。
代码来源:https://leetcode-cn.com/problems/max-area-of-island/solution/biao-zhun-javadong-tai-gui-hua-jie-fa-100-by-mark-/
public int maxAreaOfIsland(int[][] grid){
int res = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if (grid[i][j] == 1){
res = Math.max(res,dfs(i,j,grid));
}
}
}
return res;
}
private int dfs(int i, int j, int[][] grid) {
if (i < 0 || j < 0 || i >= grid.length || j >= grid[i].length || grid[i][j] == 0){
return 0;
}
//沉岛思想,当前的grid[i][j]=1,证明当前方向要加的area >= 1,所以直接num最少是1,之后沉岛
//确保以后的循环遍历不会再遍历到这个点。
grid[i][j] = 0;
int nums = 1;
nums += dfs(i - 1,j,grid);
nums += dfs(i + 1,j,grid);
nums += dfs(i,j + 1,grid);
nums += dfs(i,j - 1,grid);
return nums;
}