leetcode日记(30)组合总和Ⅱ

一开始我低估了这题的难度,以为用贪心算法或者上一题的解法就能做出来TT后来发现很多做法会得出重复解,只能另辟蹊径了...!

想出来的解法是先将candidates中重复的元素提出来用数组记录重复的个数,然后将重复的元素去掉,接着用原来(上一题)的方法依次遍历元素,如果能取该元素就继续遍历该元素,不能取就全部跳过,最终可以得到正确解。

cpp 复制代码
class Solution {
public:
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target){
        vector<vector<int>> v;
        vector<int> vec;
        sort(candidates.begin(),candidates.end());
        vector<int> g(candidates[candidates.size()-1]+1);
        int u=0;
        for(int i=candidates.size()-1;i>=0;i--){
            while(i>=1&&candidates[i]==candidates[i-1]){
                i--;
                g[candidates[i]]++;
            }
        }
        for(int i=0;i<g.size();i++) cout<<g[i]<<" ";
        candidates.erase(unique(candidates.begin(), candidates.end()), candidates.end());
        hs(candidates,target,v,vec,candidates.size()-1,g);
        return v;
    }
    void hs(vector<int> candidates, int target,vector<vector<int>>& v,vector<int> vec,int x,vector<int> g){
        while(x>1&&candidates[x]==candidates[x-1]) x--;
        for(;x>=0;x--){
            if(candidates[x]<target){
                vec.push_back(candidates[x]);
                if(g[candidates[x]]>0){
                    g[candidates[x]]--;
                    hs(candidates,target-candidates[x],v,vec,x,g);
                    g[candidates[x]]++;
                }
                else hs(candidates,target-candidates[x],v,vec,x-1,g);
                vec.pop_back();
            }
            else if(candidates[x]==target){
                vec.push_back(candidates[x]);
                v.push_back(vec);
                vec.pop_back();
            }
        }
    }
};
相关推荐
冠位观测者43 分钟前
【Leetcode 热题 100】208. 实现 Trie (前缀树)
数据结构·算法·leetcode
小王爱吃月亮糖2 小时前
C++的23种设计模式
开发语言·c++·qt·算法·设计模式·ecmascript
IT猿手4 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解LRMOP1-LRMOP6及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·算法·matlab·智能优化算法·多目标算法
测试界萧萧4 小时前
15:00面试,15:08就出来了,问的问题有点变态。。。
自动化测试·软件测试·功能测试·程序人生·面试·职场和发展
InfiSight智睿视界4 小时前
AI 技术,让洗护行业焕然「衣」新
人工智能·算法
程序员一诺5 小时前
【机器学习】嘿马机器学习(算法篇)第11篇:决策树算法,学习目标【附代码文档】
人工智能·python·算法·机器学习
Evand J5 小时前
平方根无迹卡尔曼滤波(SR-UKF)算法,用于处理三维非线性状态估计问题
算法
taoyong0015 小时前
代码随想录算法训练营第十五天-二叉树-110.平衡二叉树
数据结构·算法
-芒果酱-5 小时前
k-Means聚类算法 HNUST【数据分析技术】(2025)
算法·kmeans·聚类
渣渣威的仿真秀5 小时前
Jensen-Shannon Divergence:定义、性质与应用
人工智能·算法·概率论