(1) 首先需要sort;
(2)每个val是否可以重新利用;
(3) 数组里是否又重复的数值;
(4) 根据题意控制start的值。
class Solution {
void combinate(vector<int>& candidates,vector<int>& item, int start, int sum, int target, vector<vector<int>>& ret) {
if(sum == target){
ret.push_back(item);
return;
}
for(int i=start;i<candidates.size();i++) {
if(sum + candidates[i] > target)
break;
sum += candidates[i];
item.push_back(candidates[i]);
//如果数组里又重复的数值也可以去掉。
combinate(candidates,item,i,sum,target,ret); //如果数字不能重复, start = i+1
sum -= item[item.size()-1];
item.pop_back();
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ret;
if(candidates.size() == 0) return ret;
sort(candidates.begin(),candidates.end());
vector<int> item;
int start = 0;
combinate(candidates,item,start,0,target,ret);
return ret;
}
};