版权声明:本文为博主原创文章,未经博主允许可以转载。(转呀转呀/笑哭),希望标注出处hhh https://blog.csdn.net/qq_36428171/article/details/89372151
题目:
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括 target)都是正整数。
- 解集不能包含重复的组合。
题目链接:Combination Sum
C++:
index 可以保证结果不是重复的
class Solution {
public:
vector<vector<int>> ret;
void dfs(vector<int>& candidates, vector<int>& sub, int target, int index)
{
int sum = 0;
for(int i=0;i<sub.size();i++)
sum += sub[i];
if(sum==target)
{
ret.push_back(sub);
return;
}
else if(sum>target)
return;
else
{
for(int i=index;i<candidates.size();i++)
{
sub.push_back(candidates[i]);
dfs(candidates, sub, target, i);
sub.pop_back();
}
}
return;
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
int len = candidates.size();
if(len == 0)
return ret;
vector<int> sub;
dfs(candidates, sub, target, 0);
return ret;
}
};