class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
int m=mat.size();
int n=mat[0].size();
vector<int> ans(m*n);
//对角巷方向次数
int count=n+m-1;
int col=0,row=0,index=0;
for (int i = 0; i < count; i++) {
//判断对角线方向(因题目初始从右上(即i=0)开始):偶数右上,奇数左下
if (i % 2 == 0) {
//右上操作
while (row >= 0 && col < n) {
//将矩阵数存入存放数组
ans[index] = mat[row][col];
//索引后移
index++;
//右上规律:行减一,列加一
row--;
col++;
}
//判断是否为越界情况:不越界正常行加一,越界行加二,列减一;
//(此处不理解的拿张草稿纸将循环中row和col的值遍历写一下对照矩阵图就明白了)
if (col < n) {
row++;
}
else {
row += 2;
col--;
}
}
//左下操作:按规律与右上相反即可
else {
while (row < m && col >= 0) {
ans[index] = mat[row][col];
index++;
row++;
col--;
}
if (row < m) {
col++;
} else {
row--;
col += 2;
}
}
}
// 返回存放数组
return ans;
}
};
leetcode里的数组的对角线遍历,改了个c++版本的
本文介绍了如何使用C++编写一个函数,解决LeetCode中的数组对角线遍历问题,通过两个嵌套循环和条件判断实现从右上到左下和从左下到右上的对角线顺序存储。

1103

被折叠的 条评论
为什么被折叠?



