经典题目,用深搜即可
class Solution {
int[][] visited;
int[] dx={1,-1,0,0,1,-1,1,-1};
int[] dy={0,0,1,-1,1,-1,-1,1};
public int[] pondSizes(int[][] land) {
visited=land;
List<Integer> list=new ArrayList<>();
int rows= land.length;
int cols=land[0].length;
for(int i=0;i<rows;i++)
{
for(int j=0;j<cols;j++)
{
if(land[i][j]==0)
{
list.add(dfs(land,i,j));
}
}
}
int[] res=new int[list.size()];
for(int i=0;i< list.size();i++)
res[i]= list.get(i);
Arrays.sort(res);
return res;
}
public int dfs(int[][] land,int x,int y)
{
int area=1;
visited[x][y]=1;
for(int i=0;i<8;i++){
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>=0&&tx< land.length&&ty>=0&&ty<land[0].length&&visited[tx][ty]==0){
area=area+dfs(land,tx,ty);
}
}
return area;
}
}