LeetCode 90. 子集 II

class Solution {
public:
    unordered_map<int ,int> cnt;
    vector<vector<int>> res;
    vector<int> path;
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        for(auto i:nums)
            cnt[i]++;
        dfs(-10);//从-10开始枚举每一个数
        return res;
    }
    void dfs(int u)
    {
        if(u>10)
        {
            res.push_back(path);
            return ;
        }
        for(int i=0;i<cnt[u]+1;i++)//枚举每一个数选i个的情况
        {
            dfs(u+1);
            path.push_back(u);
            //第一次递归时,path是没有加入数字u的,第i递归path加入了i-1个数字u
        }
        //退出循环时,需要恢复现场,此时已经加入了cnt[u]个数字u
        for(int i=0;i<cnt[u]+1;i++)
            path.pop_back();
    }
};
posted @   穿过雾的阴霾  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示