- 498. 对角线遍历(对角线遍历)">498. 对角线遍历(对角线遍历)
498. 对角线遍历(对角线遍历)
- 思想很重要,以对角线的数目来作为遍历的次数
- 遍历方向有两种,分别是左下到右上,以及右上到左下,以i%2来分辨
- 遍历条件可分为两种,分别是在中线之后以及在中线之前。确定不同规律的起始点。
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
int m = mat.size();
int n = mat[0].size();
vector<int> res;
for (int i = 0; i < m + n - 1; i++) {
if (i % 2) {//这个i%2是遍历的方向
int x = i < n ? 0 : i - n + 1;//这里的i<n代表是前半段还是后半段
int y = i < n ? i : n - 1;
while (x < m && y >= 0) {
res.emplace_back(mat[x][y]);
x++;
y--;
}
} else {
int x = i < m ? i : m - 1;
int y = i < m ? 0 : i - m + 1;
while (x >= 0 && y < n) {
res.emplace_back(mat[x][y]);
x--;
y++;
}
}
}
return res;
}
};