日野弥生:勉強しよう

LeetCode 498 - 对角线遍历

发表于2024年12月17日

#数组 #数学 #矩阵

diagonal-traverse

通过观察发现,矩阵对角线上的两个下标的和是相同的,很自然想到把下标相同的数据存在同一个容器中,还发现:

容器个数经过模拟,得出nums.size = m+n-1;

class Solution {
public:
    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {
        int m=mat.size(),n=mat[0].size();
        std::vector<std::map<int,int> > nums(m+n-1);
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                nums[i+j].insert({i, mat[i][j]});
            }
        }

        std::vector<int> result{};
        for(int i=0;i<nums.size();i++)
        {
            if(i%2==0)
            {
                for(auto it=nums[i].rbegin();it!=nums[i].rend();++it)
                {
                    result.push_back(it->second);
                }
            }
            else
            {
                for(auto it=nums[i].begin();it!=nums[i].end();++it)
                {
                    result.push_back(it->second);
                }
            }
        }
        return result;
    }
};

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/diagonal-traverse

上一篇

LeetCode 73 - 矩阵置零

下一篇

LeetCode 14 - 最长公共前缀