// 这里我们新加入三个变量,start记录当前递归到的下标,list为一个解,out保存所有已经得到的解,每次调用新的递归函数时,此时的target都要减去当前数组里的数。
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> out;
vector<int> list;
sort(candidates.begin(), candidates.end());
combinationSum(candidates, target, out, list, 0);
return out;
}
void combinationSum(vector<int>& candidates, int target, vector<vector<int>>& out, vector<int>& list, int start){
if (target < 0) return;
if (target == 0){
out.push_back(list);
return;
}
for (int i = start; i < candidates.size(); i++){
list.push_back(candidates[i]);
combinationSum(candidates, target - candidates[i], out, list, i);
list.pop_back();
}
}
};