class Solution {
Queue<Integer> queue = new PriorityQueue<>();
public int[] pondSizes(int[][] land) {
int m = land.length;
int n = land[0].length;
for(int i=0;i<m;i++){
for(int j =0;j<n;j++)
{
if(land[i][j] == 0){
int area = visitPool(land,i,j);
queue.offer(area);
}
}
}
int[] ans = new int[queue.size()];
int i = 0;
while(queue.size()!=0)
ans[i++] = queue.poll();
return ans;
}
public int visitPool(int[][] land,int i,int j){
land[i][j] = 1;
int m = land.length;
int n = land[0].length;
int area = 1;
if(i-1 >= 0 && land[i-1][j] ==0)//上
area += visitPool(land,i-1,j);
if(i+1 < m && land[i+1][j] ==0)//下
area += visitPool(land,i+1,j);
if(j-1 >= 0 && land[i][j-1] ==0)//左
area += visitPool(land,i,j-1);
if(j+1 < n && land[i][j+1] ==0)//右
area += visitPool(land,i,j+1);
if(i-1 >= 0 && j-1 >= 0 && land[i-1][j-1] ==0)//左上
area += visitPool(land,i-1,j-1);
if(i-1 >= 0 && j+1 < n && land[i-1][j+1] ==0)//右上
area += visitPool(land,i-1,j+1);
if(i+1 < m && j-1 >= 0 &&land[i+1][j-1] ==0)//左下
area += visitPool(land,i+1,j-1);
if(i+1 < m && j+1 <n &&land[i+1][j+1] ==0)//右下
area += visitPool(land,i+1,j+1);
return area;
}
}
08-23
1171