class Solution {
public:
vector<vector<int> > answer;
void func(vector<int> candidates, int target,vector<int> now,int start){
for(int i=start;i<candidates.size();i++){
if(candidates[i]>target) return;
else if(candidates[i]<target){
now.push_back(candidates[i]);
func(candidates,target-candidates[i],now,i);
now.pop_back();
}
else if(candidates[i]==target){
now.push_back(candidates[i]);
answer.push_back(now);
return;
}
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<int> now;
func(candidates,target,now,0);
return answer;
}
};
将数组排序后,进行递归,每次放入一个元素后在target上减去相应的元素,再进行递归。增加一个递归条件为每次放入后,从不小于该元素的那个元素起开始递归。