**LEEDCODE 498对角线遍历

**LEEDCODE 498对角线遍历_第1张图片

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
        int n = mat.size();
        int m = mat[0].size();
        std::vector<int> a;
        for(int i = 0; i < m+n-1; i++)
        {
            //  偶数 下往上
            if(i % 2 == 0)
            {
                // 起点 x = min(i, n - 1)       y = i - x
                // 终点 x = max(0, i-(m - 1))   y = i - x
                for(int j = min(i, n - 1); j >= max(0, i-(m - 1)); j--)
                {
                    a.push_back(mat[j][i - j]);
                }
            }   
            else
            {
                // 起点 x = max(0, i-(m - 1))       y = i - x
                // 终点 x = min(i, n - 1)   y = i - x
                for(int j = max(0, i-(m - 1)); j <= min(i, n - 1); j++)
                {
                    a.push_back(mat[j][i - j]);
                }
            }
        }
        return a;
    }
};

**LEEDCODE 498对角线遍历_第2张图片
**LEEDCODE 498对角线遍历_第3张图片
**LEEDCODE 498对角线遍历_第4张图片

你可能感兴趣的:(数据结构)