c_cpp 498.对角线导线 - 难度中位数 - 2018.8.17
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 498.对角线导线 - 难度中位数 - 2018.8.17相关的知识,希望对你有一定的参考价值。
/*
1:每一条斜线遵循 (x+1,y-1) 或者 (x-1,y+1) 的规律
2:边界点过渡遵循 (x,y+1) 或者 (x+1,y) 的规律,对应原斜线的增长规律,如果刚好该点不存在,切换增长的 x 或者 y
*/
class Solution {
public:
vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
vector<int> result;
int columnSize = matrix.size();
if (columnSize < 1) {
return result;
}
int lineSize = matrix[0].size();
int lIndex = 0;
int rIndex = 0;
int curResultIndex = 0;
bool incRightSide = true;
while (1) {
// 先把当前的元素添加到结果数组里面
result.insert(result.end(), matrix[lIndex][rIndex]);
curResultIndex++;
// 移动到下一个需要处理的节点,判断是否临界
if (incRightSide
&& (lIndex-1 >= 0 && rIndex+1 < lineSize)) {
lIndex--;
rIndex++;
continue;
} else if (!incRightSide
&& (rIndex-1 >= 0 && lIndex+1 < columnSize)) {
lIndex++;
rIndex--;
continue;
}
// 处理临界条件
if (incRightSide
&& rIndex+1 < lineSize) {
rIndex++;
} else if (lIndex+1 < columnSize) {
lIndex++;
} else if (rIndex+1 < lineSize) {
rIndex++;
} else {
break;
}
incRightSide = !incRightSide;
}
return result;
}
};
以上是关于c_cpp 498.对角线导线 - 难度中位数 - 2018.8.17的主要内容,如果未能解决你的问题,请参考以下文章
LEETCODE 498. 对角线遍历
498. Diagonal Traverse对角线z型traverse
498. 对角线遍历(LeetCode 华为专题)
LeetCode498 对角线遍历[模拟] HERODING的LeetCode之路
LeetCode 498. 对角线遍历c++/java详细题解
Leetcode 498. Diagonal Traverse