思路:dfs+回溯
class Solution {
public:
void dfs(vector<int>& candidates,int target,int sum,vector<vector<int>>& ans,vector<int>& path,vector<int>& id){
for(int i=id[id.size()-1];i<candidates.size();i++){
path.push_back(candidates[i]);
id.push_back(i);
int T = sum + candidates[i];
if(T < target) dfs(candidates,target,T,ans,path,id);
if(T == target) ans.push_back(path);
path.pop_back();
id.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<vector<int>> ans;
vector<int> path;
vector<int> id;
id.push_back(0);
dfs(candidates,target,0,ans,path,id);
return ans;
}
};