数字可以重复选,如 上面的示例二,我们先把以2开头的全部选完,在选以3开头的。
这样保证了结果中没有重复的(如2,3,3和 3,2,3)
参数k来控制选数的时候只能从本身或者下一个数选。
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> ans;
vector<int>tep;
dfs(ans,candidates,target,tep,0,0);
return ans;
}
void dfs( vector<vector<int>>& ans,vector<int>& candidates, int target, vector<int>tep,int sum,int k)
{
if(target==sum){
ans.push_back(tep);
return ;
}
if(target<sum) return ;
for(int i=k;i<candidates.size();i++){
tep.push_back(candidates[i]);
dfs(ans,candidates,target,tep,sum+candidates[i],i);
tep.pop_back();
}
}
};
看了题解,也可以是减法。