回溯法——习题总结
题目一:组合总和
![](https://i-blog.csdnimg.cn/blog_migrate/826db5383c1b495fcdc036c7749f13b2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6f992e57d424d35c58a8c9d9ca14ab9.png)
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
//传入待选数组和目标值
sort(candidates.begin(),candidates.end());//将待查询的数组进行排序
vector<vector<int>> result;//定义输出结果的数组 二维数组 存放很多组解
vector<int> temp;//定义存放每组解的一维数组
findSumCom(0,target,result,temp,candidates);
return result;//返回结果预测的值
}
//递归回溯
void findSumCom(int start,int sum,vector<vector<int>>& result,vector<int> temp,vector<int>& candidates){
//传入参数 开始查询的数组下标、总和、三个数组
//递归的边界条件 1.待选数组里的元素大于剩余的总和 不再向后遍历 退出递归 2.待选数组里的元素等于目标值 加入元素并保存结果
if(candidates[start] > sum)
{
return;
}
if(sum == candidates[start]){
temp.push_back(sum);
result.push_back(temp)