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