Given a set of candidate numbers (candidates
) (without duplicates) and a target number (target
), find all unique combinations in candidates
where the candidate numbers sums to target
.
The same repeated number may be chosen from candidates
unlimited number of times.
Note:
- All numbers (including
target
) will be positive integers. - The solution set must not contain duplicate combinations.
Example 1:
Input: candidates =[2,3,6,7],
target =7
, A solution set is: [ [7], [2,2,3] ]
解题思路:
利用递归回溯,对原始数据先进行排序,这样可以剪枝,加快计算速度。
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> combination;
vector<vector<int>> ret;
sort(candidates.begin(), candidates.end());
combinationSum(candidates,combination,ret,target,0);
return ret;
}
void combinationSum(vector<int>& candidates, vector<int> combination,vector<vector<int>> &ret,int target,int start)
{
//达到要求,压入Vector
if(!target)
{
ret.push_back(combination);
return;
}
for(int i=start; i< candidates.size() && candidates[i] <=target ;i++)
{
combination.push_back(candidates[i]);
combinationSum(candidates,combination,ret,target-candidates[i],i);
combination.pop_back();//到达这一步,说明candidates[i]不合适
}
}
};