分为两种情况
1、上行,即横坐标+纵坐标为偶数,分为三种情况:
1)到达3、9的位置,即右边界,纵坐标 = m-1,那么下一步就是向下走,即横坐标+1,纵坐标不变
2)到达1的位置,即上界线,表示为横坐标 = 0,纵坐标<m-1,那么下一步就是向右走,即横坐标不变,纵坐标+1
3)到达5、7的位置,未碰到界线,表示为横坐标>0,纵坐标<m-1,那么下一步就是向右上方走,即横坐标-1,纵坐标+1
注:三种情况不能换位子,如果同时碰上右边界和上边界,是1)的情况而不是2)的情况
1、下行,即横坐标——纵坐标为奇数,也分为三种情况,与上行类似
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int n = mat.length;
int m = mat[0].length;
int[] ans = new int[m*n];
int x = 0;
int y = 0;
for(int i=0;i<m*n;i++){
ans[i] = mat[x][y];
if((x+y)%2==0){
if(y==m-1){
x++;
}else if(x==0){
y++;
}else{
x--;
y++;
}
}else{
if(x==n-1){
y++;
}else if(y==0){
x++;
}else{
x++;
y--;
}
}
}
return ans;
}
}