版权声明:by ruohua3kou https://blog.csdn.net/ruohua3kou/article/details/88960179
典型的回溯+递归问题,注意需要对目标数组排序
class Solution
{
public:
vector<vector<int>> combinationSum(vector<int> &candidates, int target)
{
vector<vector<int>> res;
sort(candidates.begin(), candidates.end());
vector<int> temp;
helper(res, temp, candidates, target, 0);
return res;
}
void helper(vector<vector<int>> &res, vector<int> temp, vector<int> &candidates, int target, int start)
{
if (target == 0)
{
res.push_back(temp);
return;
}
for (int i = start; i < candidates.size() && target >= candidates[i]; i++)
{
temp.push_back(candidates[i]);
helper(res, temp, candidates, target - candidates[i], i);
temp.pop_back();
}
}
};