文章目录
更多LeetCode题解
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]
]
Example 2:
Input: candidates = [2,3,5], target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
Solution
采用递归的方法解决。
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> solutionSet;
for(int i=0;i<candidates.size();i++) {
vector<int> res;
res.push_back(candidates[i]);
findSolution(solutionSet, target-candidates[i], res, candidates);
}
return solutionSet;
}
void findSolution(vector<vector<int>>& solutionSet, int target, vector<int>& res, vector<int>& candidates){
if(target==0){
vector<int> c_res=res;//res后面要擦除一位,不能直接sort res。
sort(c_res.begin(),c_res.end());
if(find(solutionSet.begin(),solutionSet.end(), c_res) == solutionSet.end()){
solutionSet.push_back(c_res);
}
res.erase(res.end()-1);
return;
}
else if(target>0){
for(int i =0;i<candidates.size();i++){
res.push_back(candidates[i]);
findSolution(solutionSet, target-candidates[i], res, candidates);
}
res.erase(res.end()-1);
return;
}
else{
res.erase(res.end()-1);
return;
}
}
};
此方法虽然AC,但效率较低。有时间可以学习学习其他方法。