题目
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
- 所有数字(包括 target)都是正整数。
- 解集不能包含重复的组合。
示例
示例1:
输入: candidates = [2,3,6,7], target = 7,
所求解集为:
[
[7],
[2,2,3]
]
示例2:
输入: candidates = [2,3,5], target = 8,
所求解集为:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
C++代码
回溯法
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target)
{
vector<vector<int>> res;
vector<int> tmp_res;
if(candidates.size()==0) return res;
getComb(res,tmp_res,candidates,target,0);
return res;
}
void getComb(vector<vector<int>> &res,vector<int> &tmp_res,vector<int> candidates,int &target,int start)
{
if(target<0)
return;
if(target==0)
{
res.push_back(tmp_res);
return;
}
for(int i=start;i<candidates.size();i++)
{
int num1=candidates.at(i);
int diff = target-num1;
tmp_res.push_back(num1);
getComb(res,tmp_res,candidates,diff,i);
tmp_res.pop_back();
}
}
};