给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
解释:
说明:
给定矩阵中的元素总数不会超过 100000 。
题解:
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int m=mat.length;
int n=mat[0].length;
int[] res=new int[m*n];
int a=0;//行
int b=0;//列
for(int i=0;i<m*n;i++){
res[i]=mat[a][b];
if((a+b)%2==0){//向右上
if(a-1>=0&&b+1<n){//没越界
a--;b++;
}else if(b+1>=n){
a++;
}else{
b++;
}
}else{
if(a+1<m&&b-1>=0){
a++;b--;
}else if(a+1>=m){
b++;
}else{
a++;
}
}
}
return res;
}
}
Accepted
- 32/32 cases passed (3 ms)
- Your runtime beats 61.84 % of java submissions
- Your memory usage beats 29.66 % of java submissions (40.7 MB)