public int[] pondSizes(int[][] land) { List<Integer> list = new ArrayList<>(); int temp; for (int i = 0; i < land.length; i++) { for (int j = 0; j < land[0].length; j++) { temp = findpond(land, i, j); if (temp != 0) { list.add(temp); } } } int[] result = list.stream().mapToInt(Integer::valueOf).toArray(); Arrays.sort(result); return result; } private int findpond(int[][] land, int i, int j) { int sum = 0; if (i < 0 || i >= land.length || j < 0 || j >= land[0].length || land[i][j] != 0) { return sum; } land[i][j] = -1; sum++; sum += findpond(land, i + 1, j); sum += findpond(land, i, j + 1); sum += findpond(land, i - 1, j); sum += findpond(land, i, j - 1); sum += findpond(land, i + 1, j + 1); sum += findpond(land, i - 1, j - 1); sum += findpond(land, i + 1, j - 1); sum += findpond(land, i - 1, j + 1); return sum; }
依然是別人的題解,自己看懂寫了一遍。
對於DFS和遞歸還是不熟練,很多地方就想不到,命名也是不難的東西。
這里面將Arraylist轉化為list的這個語句
int[] result = list.stream().mapToInt(Integer::valueOf).toArray();
多妙啊,對stream()與lambda的用法尚且不會,有待學習。
對list進行排序,我還傻傻地寫了冒泡排序,實際上一句話就可以搞定啊:
Arrays.sort(result);
多神奇啊,這還是刷題刷得不夠多的原因,要繼續加油啊。
像這道題,思路多清楚。遍歷矩陣,遇到非零元素,就返回結果為0.遇到代表池塘的0,就將該元素標記為-1,可以避免重復搜索,並且在8個方向上進行統計池塘面積。
多妙啊!!!!
——2020.6.21