leetcode216. 组合总和 III
2022/1/27 23:04:40
本文主要是介绍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; } };
这篇关于leetcode216. 组合总和 III的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版