题目描述:
算法:
回溯法
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>>ans;
vector<int>col;
if(candidates.size()==0)
return ans;
sort(candidates.begin(), candidates.end());
dfs(candidates, target, ans, col, 0);
return ans;
}
void dfs(vector<int>& candidates, int target, vector<vector<int>>& ans, vector<int>& col, int i)
{
if(target == 0)
{
ans.push_back(col);
return ;
}
if(i == candidates.size())
{
return ;
}
for( ;i<candidates.size();i++)
{
if(target - candidates[i] >=0)
{
col.push_back(candidates[i]);
dfs(candidates, target-candidates[i],ans,col,i);
col.pop_back();
}
}
}
};