//DFS
class Solution {
public:vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
vector<vector<int>>result;
vector<int>temp;
sort(candidates.begin(),candidates.end());//先要排序,升序之后才能用dfs,否则return的收敛条件会出问题
dfs(candidates,target,0,temp,result);
return result;
}
void dfs(vector<int> &candidates, int gap,int start, vector<int> &temp,vector<vector<int>> &result)
{//gap是当前temp的vector距离target还有多少
if(!gap)
{
result.push_back(temp);
return;
}
for(int i=start;i<candidates.size();i++)
{
if(gap<candidates[i])
continue;
temp.push_back(candidates[i]);
dfs(candidates,gap-candidates[i],i,temp,result);
temp.pop_back();
}
}
};