LeetCode 39. Combination Sum

类似需要枚举所有解的题目,都是典型的dfs的题目。

本题要求答案里不能有重复的解,因此先将数组排序,dfs里增加一个start参数,来表明开始的下标,防止重复发生。仔细体会一下!

class Solution {
public:
    vector<vector<int>> res;
    
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        vector<int> tmp;
        dfs(candidates, target, tmp, 0);
        return res;
    }
    
    void dfs(vector<int>& candidates, int target, vector<int> &tmp, int start){
        if (target<0) return;
        if (target==0) res.push_back(tmp);
        for (int i=start;i<candidates.size();++i){
            tmp.push_back(candidates[i]);
            dfs(candidates,target-candidates[i],tmp,i);
            tmp.pop_back();
        }
    }
};

 

posted @ 2018-07-29 22:19  約束の空  阅读(101)  评论(0)    收藏  举报