1class Solution {2public int[][] diagonalSort(int[][] mat) {3int n = mat.length;4int m = mat[0].length;5for (int i = 0; i < m; i++) {6give(0, i, mat, n, m);7}8for (int i = 1; i < n; i++) {9give(i, 0, mat, n, m);10}11return mat;12}1314public void give(int i, int j, int[][] mat, int n, int m) {15int[] dig = new int[Math.min(m - j, n - i)];16int r = i;17int c = j;18int k = 0;19while (r < n && c < m) {20dig[k] = mat[r][c];21r++;22c++;23k++;24}25Arrays.sort(dig);26k = 0;27while (i < n && j < m) {28mat[i][j] = dig[k];29i++;30j++;31k++;32}33}34}