public int[] diagonalOrder (int[][] mat) {
// write code here
int i=0;
int j=0;
int n = mat.length;
int m = mat[0].length;
int[] res = new int[n * m];
int index = 0;
int[][] dirs = new int[][]{{-1,1},{1,-1}};
while (index < res.length) {
System.out.println("i:" + i + "j:" + j);
res[index++] = mat[i][j];
int[] dir = dirs[(i + j) % 2];
if (i + dir[0] < n && i + dir[0] >= 0 && j + dir[1] < m && j + dir[1] >= 0) {
// 沿着对角线遍历
i = i + dir[0];
j = j + dir[1];
} else {
// 对角线下标是不断累加的,0:(0,0);1:(0,1),(1,0);2:(2,0),(1,1),(0,2)
int next = i + j + 1;
if (next % 2 == 0) {
i = next >= n ? n-1 : next;
j = next - i;
} else {
j = next >= m ? m-1 : next % m;
i = next - j;
}
}
}
return res;
}