给定一个含有 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:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
if(matrix.empty())
return {};
int line = matrix.size(), column = matrix[0].size();
int count = line + column - 1; //改变方向次数
vector<int> res(line * column, 0);
int ResIndex = 0;
int m = 0, n = 0; //横纵坐标
for(int i = 0; i < count; i++)
{
if(i % 2 == 0)
{//右上角存入数据
while(m >= 0 && n < column)
{
res[ResIndex] = matrix[m][n];
ResIndex++;
m--;
n++;
}
if(n < column) //边界值处理
m++;
else
{
m += 2;
n--;
}
}
else
{//左上角存入数据
while(n >= 0 && m < line)
{
res[ResIndex] = matrix[m][n];
ResIndex++;
m++;
n--;
}
if(m < line)
n++;
else
{
n += 2;
m--;
}
}
}
return res;
}
};