经典的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] = (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;}}
不要忘记回溯,DFS过程中做的标记需要记得还原,否则会栈溢出
本文发布于:2024-02-02 05:52:07,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170682432841785.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |