模拟题,每条对角线(x,y)和相同,枚举x即可
ref{:target=”_blank”}
C++ 代码
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
vector<int> res;
if(mat.empty() || mat[0].empty()) return res;
int m = mat.size(), n = mat[0].size();
for(int b = 0; b<m+n-1; b++) {
// x + y = b, 这里枚举 横坐标
// 找规律, 先递增然后到 m-1,转折点后保持不变
int left_down = min(b, m-1);
// 先不变保持0,b = n-1 转折点然后到
int right_top = max(0, b-(n-1));
if(b%2 == 0) {
// left_down -> right_top
for(int i=left_down; i>=right_top; --i) {
res.push_back(mat[i][b-i]);
}
} else {
// right_top -> left_down
for(int i=right_top; i<=left_down; ++i) {
res.push_back(mat[i][b-i]);
}
}
}
return res;
}
};