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] ]
给一串数字,每个元素可以重复使用,找出所有元素组合的和等于target。
采用深度优先搜索,借用这位博主的图:对于candidates=[1,2] target=3;
二叉树的数据结构是递归,所以可以采用递归解法。
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> res;
vector<int> oneResult;
sumIteration(candidates,target,oneResult,res,0);
return res;
}
void sumIteration(vector<int>& candidates,int target,vector<int>oneResult,vector<vector<int>>& res,int index){
if(target == 0){
res.push_back(oneResult);
return;
}
for(int i=index;i<candidates.size();i++){
if(target-candidates[i] >= 0){
oneResult.push_back(candidates[i]);
sumIteration(candidates,target-candidates[i],oneResult,res,i);
oneResult.pop_back();//当前通过递归已经找到一个解,所以将这次的值pop出。
}
}
}
};