class Solution
{
public:
std::vector<std::vector<int>> res;
std::vector<int> path;
void backtracking(std::vector<int> &candidates, int target, int sum, int starIndex)
{
if (sum > target)
return;
if (sum == target)
{
res.push_back(path);
return;
}
for (int i = starIndex; i < candidates.size(); i++)
{
sum += candidates[i];
path.push_back(candidates[i]);
backtracking(candidates, target, sum, i);
path.pop_back();
sum -= candidates[i];
}
}
std::vector<std::vector<int>> combinationSum(std::vector<int> &candidates, int target)
{
backtracking(candidates, target, 0, 0);
return res;
}
};