给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括 target)都是正整数。
- 解集不能包含重复的组合。
void my_dfs(vector<int> &candidates, int target,int idx, vector<int> &tmp, int sum, vector<vector<int>> &output) {
if(sum > target)
return;
if(sum == target) {
output.push_back(tmp);
return;
}
for(int i = idx; i < candidates.size(); i++) {
tmp.push_back(candidates[i]);
my_dfs(candidates, target, i, tmp, sum + candidates[i], output);
tmp.erase(tmp.end() - 1);
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> tmp;
vector<vector<int>> output;
for(int i = 0; i < candidates.size(); i++) {
tmp.push_back(candidates[i]);
my_dfs(candidates, target, i, tmp, candidates[i], output);
tmp.erase(tmp.end() - 1);
}
return output;
}