题目:给定M*N个元素矩阵(M行,N列),以对角线顺序返回矩阵的 所有元素,如图所示。
分析:每次比较横竖排元素的位置,当两数相加为奇数的时候和偶数的时候应该做相应的处理,比如元素2(0,1)位置相加为1奇数,这个时候就会面临三种情况,当竖排位置到达数组的最大长度时,横排位置就要加一,即往下移一个元素,当横排的元素位置为0的时候,竖排的元素就要往右移一个,其他情况下,横排的元素减一,竖排的元素加一这样就可以一次的访问数组中的元素。偶数的情况一样。
代码:
class Solution {
public int[] findDiagonalOrder(int[][] matrix) {
if (matrix.length == 0) return new int[0];
int m=0,n=0;
int len1=matrix.length;
int len2=matrix[0].length;
int [] result=new int [len1*len2];
for(int i=0;i<result.length;i++)
{
result[i]=matrix[m][n];
if((m+n)%2==0)
{
if(n==len2-1)
{
m++;
}
else if(m==0)
{
n++;
}
else
{
m--;n++;
}
}
else
{
if(m==len1-1)
{
n++;
}
else if(n==0)
{
m++;
}
else
{
m++;n--;
}
}
}
return result;
}
}