题目链接:力扣
题意:
给定一个无重复元素的正整数数组 candidates 和一个正整数 target ,找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。
candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。
对于给定的输入,保证和为 target 的唯一组合数少于 150 个。
方法: 回溯
class Solution {
private:
vector<vector<int>> res;
vector<int> vct;
vector<int> candidates;
void find(int loc,int sum,int target)//当前在candidates中的位置
{
if(sum>target) return ;//超出范围
if(sum==target)//边界条件,累加和等于target
{
res.emplace_back(vct);//将向量返回结果向量
return ;
}
for(int i=loc;i<candidates.size();i++)
{
sum += candidates[i];
vct.emplace_back(candidates[i]);
find(i,sum,target);
sum -= candidates[i];
vct.pop_back();
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
this->candidates = candidates;
find(0,0,target);
return res;
}
};