原题链接:498. 对角线遍历
solution:
模拟
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
vector<int> res; //定义返回值
if(mat.size() == 0 || mat[0].size() == 0) return res;
int m = mat.size();
int n = mat[0].size();
int sum = m * n; //总遍历次数
for(int i = 0,x = 0,y = 0;i < sum;i++) { //每次遍历对角线
//首先遍历上三角
res.push_back(mat[x][y]); //保存元素
if((x + y) % 2 == 0) { //x + y % 2 == 0表示向右上遍历
if(y == n - 1) x++; //最后一列x++
else if(x == 0) y++; //如果在第一格直接y++
else x--,y++; //剩余向右上遍历
}
else{
if (x == m - 1) y++; //如果是最后一行,不能再修改行数x了,会越界
else if (y == 0) x++; //如果是第一列,向下即可;
else x++, y--; //正常左下
}
}
return res;
}
};