标签:index int backtacking sum vector path leetcode216 III 总和
// class Solution {
// public:
// vector<vector<int> > ans;
// vector<int> path;
// void backtacking(int k,int n,int index,int sum){
// if (path.size()== k) {
// if (n == sum) ans.push_back(path);
// return;//如果 path.size() == k 而 n != sum 直接结束本次循环
// }
// for (int i = index; i <= 9; i++) {
// sum += i;
// path.push_back(i);
// backtacking(k,n,i+1,sum);
// path.pop_back();//
// sum -= i;//注意的是每次往上回溯的时候我们都需要将上一层存进去的剪掉,为其他可行解提供空间
// }
// }
// vector<vector<int>> combinationSum3(int k, int n) {
// /*思路:
// 1.总体来看这是一个解空间为k层的排列树 第一层为1~9
// 2.递归函数的参数和返回值
// 1>:返回值:vector<vector<int> > res
// 每次的求解结果:vector<int> path
// 2>:参数:
// backtacking(int k,int n,int index,int sum)
// 这里需要的index是 因为我们每次往下递归的时候 我们的返回在 缩小
// 3.递归函数的终止条件为
// k == path.size(),这里可能使 结果并不满足 n == sum 但也要结束递归,寻找下一个可行解即可
// 4.横向单层的for循环的为(1~9),纵向为递归的k层
// */
// backtacking(k,n,1,0);
// return ans;
// }
// };
class Solution {
public:
vector<vector<int> > ans;
vector<int> path;
//我们定义index可以不断缩小范围,同时也实现不重复
void backtacking(int k,int n,int index,int sum) {
if(path.size() == k) {
if(sum == n){
ans.push_back(path);
return ;
}
}
for(int i = index; i <= 9; i++) {
sum+=i;
path.push_back(i);
backtacking(k,n,i+1,sum);
sum-=i;
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
backtacking(k,n,1,0);
return ans;
}
};
标签:index,int,backtacking,sum,vector,path,leetcode216,III,总和 来源: https://blog.csdn.net/qq_48508278/article/details/122724836
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。