给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。
其实这道题挺绕的,我当时做也一下子没搞清楚,设置了一大堆边界条件把自己设死了,后面看了题解发现可以每次都按照一个方向遍历对角线,只是偶数次遍历时将说得元素翻转。
图例:
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> ans={};
if ( matrix.size()== 0) {
return ans;
}
int n=matrix.size();
int m=matrix[0].size();
vector<int> sz;
for (int d = 0; d < n+m - 1; d++)
{
sz.clear();
int r = d < m ? 0 : d - m + 1;
int c = d < m ? d :m - 1;
while (r <n && c > -1) {
sz.push_back(matrix[r][c]);
++r;
--c;
}
if (d % 2 == 0) {
reverse(sz.begin(), sz.end());
}
ans.insert(ans.end(),sz.begin(), sz.end());
}
return ans;
}
};