Combination Sum

来源:互联网 发布:下载配色软件 编辑:程序博客网 时间:2024/05/16 09:21

题目大意:给定一个数组candidates和一个数target,求一个不同的集合,集合里面的每个数来自于candidates,它们的和为target

解题思路:递归。先对candidates从大到小排序,遍历每个元素做递归,遍历到当前元素有两种选择,

第一种,选取这个数,然后继续在这个位置进行递归

第二种,不选取这个数,在这个数后面的位置进行递归


class Solution {public:    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {          vector<vector<int> > result;        vector<int> combination;        if(!candidates.empty()) {            sort(candidates.begin(), candidates.end());            combinationSumAssist(candidates, 0, target, result, combination);        }        return result;    }private:    void combinationSumAssist(vector<int> &candidates, int index, int target, vector<vector<int> > &result, vector<int> &combination) {        if(index >= candidates.size()) {            return;        }        int temp = target - candidates[index];        if(temp >= 0) {            combination.push_back(candidates[index]);            if(temp == 0) {                result.push_back(combination);            } else {                combinationSumAssist(candidates, index, temp, result, combination);            }            combination.pop_back();        }        combinationSumAssist(candidates, index + 1, target, result, combination);    }};


0 0
原创粉丝点击