leetcode-华为专题-498. 对角线遍历

 

此题属于固定题,没法扩展。

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
        int m = mat.size();
        if (m == 0) 
            return {};
        int n = mat[0].size();
        vector<int> res(m * n);
        int cnt = 0;

        for (int s = 0; s <= m + n - 2; s++) {
            if (s % 2 == 1) {
                // 奇数行,从上到下。
                // i的值没超过对角线就是第一行0,超过对角线就是s-n+1
                // 没超过对角线直线,i的最大值就是s,超过以后,i的值就是最后一列m-1;
                for (int i = max(0, s - n + 1); i <= min(m - 1, s); i++)
                    res[cnt++] = mat[i][s - i];
            } else {
                for (int i = min(m - 1, s); i >= max(0, s - n + 1); i--)
                    res[cnt++] = mat[i][s - i];
            }
        }
        return res;
    }
};

 

posted @ 2021-08-19 15:17  三一一一317  阅读(48)  评论(0)    收藏  举报