给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,4,7,5,3,6,8,9]
解释:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diagonal-traverse
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解
class Solution {
public int[] findDiagonalOrder(int[][] mat) {
int m=mat.length;
int n=mat[0].length;
int[] arr=new int[m*n];
int r=0,c=0;
for(int i=0;i<arr.length;i++){
arr[i]=mat[r][c];
//偶数向上移动->eg:7、5、3
if((r+c)%2==0){
//右边框向下移动->eg:3->6
if(c==n-1){
r++;
}
//左边框向右移动->eg:7->5
else if(r==0){
c++;
}
//向上移动->eg:5->3
else{
r--;
c++;
}
}
//奇数向下移动->eg:6->8、2->4
else{
//下边框向右移动->eg:8->9
if(r==m-1){
c++;
}
//左边框向下移动->eg:4->7
else if(c==0){
r++;
}
//向下移动->eg:2->4
else{
r++;
c--;
}
}
}
return arr;
}
}