解题思路:在数组里面寻找相连的1的个数,很容易联想到递归方法(或图的广度遍历)。首先对数组进行循环,遇到“1”时开始计算面积,通过递归方法。(这里需要注意的是要对”垂直“,“水平”,即”上“,”下“,”左“,”右“进行寻找,只对两个方向遍历会遗漏遍历 ,如[[0,1][1,1]]。并且为了使已经遍历过的不再重复计算,在遍历后将其赋值为“0”表示已经遍历过了)。最后得出每次计算面积中的最大值即可。
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int i,j,temp,result=0;
for(i=0;i<grid.length;i++){
for(j=0;j<grid[0].length;j++){
if(grid[i][j]==1){
result=Math.max((temp=countArea(grid,i,j)),result);
}
}
}
return result;
}
public int countArea(int [][] grid,int i,int j){
if(i<0||j<0||i>=grid.length||j>=grid[0].length||grid[i][j]!=1) return 0;
grid[i][j]=0;
return 1+countArea(grid,i+1,j)+countArea(grid,i-1,j)+countArea(grid,i,j+1)+countArea(grid,i,j-1);
}
}