[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
<>1.题目
<>2.思路
经典的DFS+回溯法套路模板,这题比较麻烦的是需要遍历 8 个方向
Java语言题解
class Solution { List<Integer> array = new ArrayList<Integer>(); int rowLen;
int colLen; public int[] pondSizes(int[][] land) { rowLen = land.length; colLen
= land[0].length; for(int i = 0;i<rowLen;i++){ for(int j = 0;j<colLen;j++){ if(
land[i][j] == 0){ array.add(dfs(land,i,j)); land[i][j] = 0; } } } Collections.
sort(array); int size = array.size(); int[] result = new int[size]; for(int i =
0;i<size;i++){ result[i] = array.get(i).intValue(); } return result; } public
int dfs(int[][] land,int i,int j){ if(!checkBoard(land,i,j)){ return 0; } int
count= 1; land[i][j] = -1; count+=dfs(land,i-1,j-1); // 左上角 count+=dfs(land,i-1,
j); //正上方 count+=dfs(land,i-1,j+1); //右上角 count+=dfs(land,i,j+1); //右一个 count+=
dfs(land,i+1,j+1); //右下角 count+=dfs(land,i+1,j); //正下方 count+=dfs(land,i+1,j-1);
//左下角 count+=dfs(land,i,j-1); //左一个 return count; } public boolean checkBoard(
int[][] land,int i,int j){ if(i>=rowLen || i<0) return false; if(j>=colLen || j<
0) return false; return land[i][j] == 0; } }
<>3.总结
不要忘记回溯,DFS过程中做的标记需要记得还原,否则会栈溢出