1.题目
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.
2.解答
class Solution {
private static final int RIGHT_UP=1;
private static final int LEFT_DOWN=2;
public int[] findDiagonalOrder(int[][] matrix) {
// 思路:需要控制上下行的方向,每次到四周时候需要变换方向
if(matrix==null||matrix.length==0||matrix[0]==null||matrix[0].length==0){
return new int[0];
}
int m=matrix.length;
int n=matrix[0].length;
int totalCount=m*n;
int passedCount=0;
int [] res=new int[totalCount];
int i=0;
int j=0;
int orient=RIGHT_UP;
while(passedCount<totalCount){
if(i<0||j<0||i>=m||j>=n){
break;
}
res[passedCount++]=matrix[i][j];
if(orient==RIGHT_UP){
i=i-1;
j=j+1;
}else if(orient==LEFT_DOWN){
i=i+1;
j=j-1;
}
boolean flag=false;
if(i<0&&j<n){
i=i+1;
flag=true;
}else if(j>=n){
i=i+2;
j=j-1;
flag=true;
}else if(i<m&&j<0){
j=j+1;
flag=true;
}else if(i>=m){
i=i-1;
j=j+2;
flag=true;
}
if(flag){
flag=false;
orient^=RIGHT_UP;
orient^=LEFT_DOWN;
}
}
return res;
}
}