Sort the Matrix Diagonally
给一个2d整数数组, 求按照对角线的数字排序后的数组. 这个就按照题意写就好了.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
class Solution { public int[][] diagonalSort(int[][] mat) { int n = mat.length; int m = mat[0].length; int i = n - 1; int j = 0; while(i >= 0) { int k = i; int q = j; List<Integer> list = new ArrayList<>(); while(k <= n - 1 && q <= m - 1) { list.add(mat[k++][q++]); } Collections.sort(list); while(k <= n - 1 && q <= m - 1) { list.add(mat[k++][q++]); } k = i; q = j; int p = 0; while(k <= n - 1 && q <= m - 1) { mat[k++][q++] = list.get(p++); } i--; } i = 0; j = 0; while(j <= m - 1) { int k = i; int q = j; List<Integer> list = new ArrayList<>(); while(k <= n - 1 && q <= m - 1) { list.add(mat[k++][q++]); } Collections.sort(list); while(k <= n - 1 && q <= m - 1) { list.add(mat[k++][q++]); } k = i; q = j; int p = 0; while(k <= n - 1 && q <= m - 1) { mat[k++][q++] = list.get(p++); } j++; } return mat; } } |