Combination Sum问题及解法

来源:互联网 发布:centos nginx配置文件 编辑:程序博客网 时间:2024/05/17 09:39

问题描述:

Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.
示例:

Given candidate set [2, 3, 6, 7] and target 7, 
A solution set is: 

[  [7],  [2, 2, 3]]

问题分析:

本题主要是一个递归遍历寻找求和组合的过程,为了方便接下来好处理,我们先把candidate集合升序排序,依次对其中的每一个元素从左向右顺序递归遍历求和,满足最终条件的数组放入res数组集合中。


过程详见代码:

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