回溯
- 不同的排列视为相同的答案,所以注意,每次递归不要使用当前索引之前的元素
- 每次递归,不断尝试将当前及之后的元素加入组合中,判断是否符合
- 当不符合目标值,直接返回
- 符合目标值,存储并返回
class Solution {
vector<vector<int>> res;
public:
void mycombinationSum(vector<int>& candidates, int target, vector<int>& current, int begin)
{
if(target < 0)
return;
if(target == 0)
{
res.push_back(current);
return;
}
for(int i=begin; i<candidates.size(); i++)
{
current.push_back(candidates[i]);
mycombinationSum(candidates, target-candidates[i], current, i);
current.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<int> current;
mycombinationSum(candidates, target, current, 0);
return res;
}
};