给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
1、索引和为偶数:
元素在第一行,往右走
元素在最后一列,往下走
其他情况,往右上走
2、索引和为奇数:
元素在第一列,往下走
元素在最后一行,往右走
其他情况,往左下走
class Solution {
public int[] findDiagonalOrder(int[][] matrix) {
//判断长度为0的数组
if(matrix.length==0){
return new int[0];
}
int m =matrix.length;
int n = matrix[0].length;
int count=m*n;
int [] num = new int [count];
int a=0,b=0;
for(int i=0;i<count;i++){
//一维数组赋值
num[i]=matrix[a][b];
//更改索引
//判断奇偶
if((a+b)%2==0){
//第一行需要向右移动,b++
if(a==0 && b!=n-1){
b++;
}
//处于最后一列时候要往下移动 a++
else if(b == n-1){
a++;
}
//其他的时候 斜向上移动
else{
a--;
b++;
}
}
else{
//第一列的时候向下移动
if(b==0 && a!=m-1){
a++;
}
//处于最后一行的时候 向右移动
else if( a == m-1){
b++;
}
//其他 向左下移动
else{
a++;
b--;
}
}
}
return num;
}
}