问题描述:
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;
}
}
};