思路:以 [[1,2,3],[4,5,6],[7,8,9]]为例,三行三列,需要遍历五次,每次遍历需要先判断奇偶,然后根据题意确定遍历的方向。每次遍历结束后需要判断临界值,然后设置下一轮遍历的起点。
public int[] findDiagonalOrder(int[][] mat) {
int m=mat.length;
int n=mat[0].length;
int[] res=new int[m*n];
int index=0;
int i=0;
int j=0;
for(int k=0;k<m+n-1;k++){
if(k%2==0) {
while (i >= 0 && j < n) {
res[index++] = mat[i][j];
i--;
j++;
}
//情况1
if (j < n) {
i++;
} else {//情况2
j--;
i += 2;
}
}
else {
while(i<m&&j>=0){
res[index++]=mat[i][j];
i++;
j--;
}
//情况3
if(i<m){
j++;
}
else {//情况4
i--;
j+=2;
}
}
}
return res;
}