给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
示例:
输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 解释:
说明:
- 给定矩阵中的元素总数不会超过 100000 。
在真实的面试中遇到过这道题?
这是一个经典的题目,向上向下分别对应的是row+col为偶数和奇数的情况
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix)
{
int row = matrix.size();
if(row==0)
return {};
int col = matrix[0].size();
if(col==0)
return {};
vector<int> res(row*col,0);
int r=0,c=0;
for(int i=0;i<row*col;i++)
{
res[i] = matrix[r][c];
// r+c 即为遍历的层数,偶数向上遍历,奇数向下遍历
if((r+c)%2==0)
{
if(c==col-1)
{
// 往右移动一格准备向下遍历
r++;
}
else if(r==0)
{
// 往下移动一格准备向下遍历
c++;
}
else
{
r--;
c++;
}
}
else
{
if(r == row-1)
{
// 往右移动一格准备向上遍历
c++;
}
else if(c==0)
{
// 往上移动一格准备向上遍历
r++;
}
else
{
r++;
c--;
}
}
}
return res;
}
};