1.题目描述
1.1笔者解答
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int max=0;
for(int i=0;i<grid.length;i++){
for(int j=0;j<grid[0].length;j++){
if(grid[i][j]==1){
max=Math.max(dfs(grid,i,j),max);
}
}
}
return max;
}
int dfs(int[][] grid,int i,int j){
if(i<0||i>=grid.length||j<0||j>=grid[0].length||grid[i][j]==0){
return 0;
}
grid[i][j]=0;
int count=1;
count+=dfs(grid,i+1,j);
count+=dfs(grid,i-1,j);
count+=dfs(grid,i,j+1);
count+=dfs(grid,i,j-1);
return count;
}
}
1.2笔者分析
我们想知道每个连通形状的面积,然后取最大值。
如果我们在一个土地上,以四个方向搜索与之相连的每个土地(以及这些土地相连的土地),那么探索过的土地总数将是该连通形状的面积。
为了确保每个土地访问不超过一次,我们每次经过一块土地时,将这块土地的值置为0.这样我们就不会多次访问同一土地。
总结
每日十题五十天,以下图为证。