标签:遍历 res mat int 纵坐标 扫描 横坐标 对角线 LeetCode
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素
1. 模拟操作
按照对角线扫描的顺序,首先要清楚得遍历m+n-1趟
对于对角线移动操作,往上扫描时横坐标增,纵坐标减,往下扫描时,横坐标减,纵坐标增
每扫描完一趟,横纵坐标有一个变化
向上扫描结束时,如果不为右边界,则纵坐标不变,横坐标加1,否则横坐标不变,纵坐标加1
向下扫描结束时,如果不为下边界,则横坐标不变,纵坐标加1,否则纵坐标不变,横坐标加1
在边界的时候,坐标初始值可以根据趟数计算得到
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) {//从上往下
int x = i < n ? 0 : i - n + 1;//不为右边界,纵坐标为0,否则通过趟数运算
int y = i - x;
while (x < m && y >= 0) {
res.emplace_back(mat[x][y]);
x++;
y--;
}
} else {//从下往上
int x = i < m ? i : m - 1;//不为下边界,纵坐标为趟数,否则为m-1
int y = i - x;
while (x >= 0 && y < n) {
res.emplace_back(mat[x][y]);
x--;
y++;
}
}
}
return res;
}
};
标签:遍历,res,mat,int,纵坐标,扫描,横坐标,对角线,LeetCode 来源: https://www.cnblogs.com/929code/p/16525631.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。