Given a matrix of M x N elements (M rows, N columns), return all elements of the matrix in diagonal order as shown in the below image.
Example:
Input: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] Output: [1,2,4,7,5,3,6,8,9] Explanation:
Note:
- The total number of elements of the given matrix will not exceed 10,000.
题意:蛇形打印矩阵。
分析:按照主对角线打印,主对角线的特点是i+j=固定值,而且i和j每次只能变1,因此有:
1)斜向上:i–; j++;
2)斜向下:i++; j–;
注意判断溢出情况。
代码如下:
class Solution {
public int[] findDiagonalOrder(int[][] matrix) {
if(matrix==null||matrix.length==0)
return new int[]{};
int n=matrix.length;
int m=matrix[0].length;
int[] result=new int[n*m];
int i=0;
int j=0;
int k=1;
for(int index=0;index<n*m;index++){
result[index]=matrix[i][j];
int di,dj;
if(k>0){//向上
di=i-1;
dj=j+1;
}
else{//向下
di=i+1;
dj=j-1;
}
if(di>=0&&di<n&&dj>=0&&dj<m)//没有溢出
{
i=di;
j=dj;
}
else{
if(k>0){//向上
if(j+1<m)//上溢出,仍然可以向右,右回头
j++;
else//右溢出,仍然可以向下,下回头
i++;
}
else{//向下
if(i+1<n)//左溢出
i++;
else//下溢出
j++;
}
k=k*-1;
}
}
return result;
}
}