
跳过交替单元格的之字形遍历
// 解法一:笨鸟解法
class Solution {
public:
vector<int> zigzagTraversal(vector<vector<int>>& grid) {
vector<int> ans;
int n = grid.size(), m = grid[0].size();
vector<vector<int>> path(n);
int k = 0;
if (m % 2 == 0) // even
k = m - 1;
else
k = m - 2;
for (int i = 0; i < n; i += 2) {
for (int j = 0; j < m; j += 2) {
path[i].push_back(grid[i][j]);
}
}
for (int i = 1; i < n ; i += 2) {
for (int j = k; j >= 0; j -= 2) {
path[i].push_back(grid[i][j]);
}
}
for (auto vec : path) {
for (auto x : vec) {
ans.push_back(x);
}
}
return ans;
}
};
// 解法二:cnt标记位完美模拟整个过程【位运算判断奇偶】
// class Solution {
// public:
// vector<int> zigzagTraversal(vector<vector<int>>& grid) {
// int n = grid.size(), m = grid[0].size();
// vector<int> vec;
// for (int i = 0, cnt = 0; i < n; i++) {
// if ((i & 1) == 0) // even line
// {
// for (int j = 0; j < m; j++, cnt ^= 1)
// if (cnt == 0)
// vec.push_back(grid[i][j]);
// } else {
// for (int j = m - 1; j >= 0; j--, cnt ^= 1)
// if (cnt == 0)
// vec.push_back(grid[i][j]);
// }
// }
// return vec;
// }
// };
// 优化解法二
// class Solution {
// public:
// vector<int> zigzagTraversal(vector<vector<int>>& grid) {
// int n = grid.size(), m = grid[0].size();
// vector<int> vec;
// for (int i = 0, cnt = 0; i < n; i++) {
// if (i & 1) {
// for (int j = m - 1; j >= 0; j--, cnt ^= 1)
// if (cnt == 0)
// vec.push_back(grid[i][j]);
// } else {
// for (int j = 0; j < m; j++, cnt ^= 1)
// if (cnt == 0)
// vec.push_back(grid[i][j]);
// }
// }
// return vec;
// }
// };
// 临时vector存储每一行 根据行号判断是否逆序
// class Solution {
// public: