YunYan

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 

dfs暴力,也就是二进制枚举的思想,也就是枚举所有的情况,这个题目有个很好的剪枝,就是先排序,然后在

这样可以避免答案出现相同的组合。

 

code:

class Solution {
public:
    int p[1000];
    vector<vector<int>> ans;
    vector<int> v;
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        dfs(candidates,target,0,0,0);
        return ans;
    }
    void dfs(vector<int>& ve,int target,int now,int cnt,int pos){
        if(now==target){
            v.clear();
            for(int i=0;i<cnt;i++){
                v.push_back(p[i]);
            }
            
            ans.push_back(v);
            return ;
        }
        for(int i=pos;i<ve.size()&&now+ve[i]<=target;i++){
            if(i>pos&&ve[i]==ve[i-1]) continue ;
            p[cnt]=ve[i];
            dfs(ve,target,now+ve[i],cnt+1,i+1);
        }
    }
};

 

posted on 2020-09-10 22:15  Target--fly  阅读(158)  评论(0编辑  收藏  举报