leetcode-backtrack-40. 组合总和 II

时间:2021-08-13
本文章向大家介绍leetcode-backtrack-40. 组合总和 II,主要包括leetcode-backtrack-40. 组合总和 II使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

参考:

https://leetcode-cn.com/problems/combination-sum-ii/solution/hui-su-suan-fa-jian-zhi-python-dai-ma-java-dai-m-3/

class Solution {
public:
    vector<vector<int>> res;
    vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
        vector<int> temp;
        sort(candidates.begin(),candidates.end());
        // for(int i = 0; i < candidates.size(); i++){
        //     cout<<"i_"<<i<<" "<<candidates[i]<<endl;
        // }
        dfs(candidates,target,0,temp);
        // if(res.size()==0)
        //     return res;
        // sort(res.begin(), res.end());
        // res.erase(unique(res.begin(), res.end()), res.end());
        return res;
    }

    void dfs(vector<int>& candidates,int target, int index, vector<int> &temp){
        //         for(int i = 0; i < candidates.size(); i++){
        //     cout<<"i_"<<i<<" "<<candidates[i]<<endl;
        // }
        // return;
        if(target==0){
            res.push_back(temp);
            return;
        }
        if(target<0)
            return;
           

        for(int i = index; i < candidates.size(); i++){
            // 去除排序后的candidate中同一层次的相同变量,可以避免重复,这句太经典了
            // 前提是排序,i>index 是因为从自身后面一位开始判断重复
            if(i > index&&candidates[i]==candidates[i-1]) 
                continue;
            temp.push_back(candidates[i]);
            dfs(candidates,target-candidates[i],i+1,temp);
            temp.pop_back();

        }
    }
};

原文地址:https://www.cnblogs.com/ymec/p/15138476.html