leetcode第216题组合总和Ⅲ
- 互联网
- 2025-09-16 16:45:02

原题出于leetcode第216题 leetcode /problems/combination-sum-iii/description/题目为:
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回
1.树型结构 2.代码 class Solution { public: vector<vector<int>> result; vector<int> path; void backtracking(int k,int n,int sum,int startindex){ if(path.size()==k){ if(n==sum){ result.push_back(path); } return ; } for(int i=startindex;i<=9;i++) { sum+=i; path.push_back(i); backtracking(k,n,sum,i+1); sum-=i; path.pop_back(); } } vector<vector<int>> combinationSum3(int k, int n) { path.clear(); result.clear(); backtracking(k,n,0,1); return result; } }; 3.剪枝操作此处有两处可做剪枝,先看如下树形结构:
如果当前n的值已经比sum大了,后续就不需要遍历了
因此可加如下代码来判断:
if(n>sum){ return ; }这里仍然有组合个数限制为k,与组合问题类似,可调节i的范围
具体代码如下:
class Solution { public: vector<vector<int>> result; vector<int> path; void backtracking(int k,int n,int sum,int startindex){ if(sum>n){ return ; } if(path.size()==k){ if(n==sum){ result.push_back(path); } return ; } for(int i=startindex;i<=9-(k-path.size())+1;i++) { sum+=i; path.push_back(i); backtracking(k,n,sum,i+1); sum-=i; path.pop_back(); } } vector<vector<int>> combinationSum3(int k, int n) { path.clear(); result.clear(); backtracking(k,n,0,1); return result; } };leetcode第216题组合总和Ⅲ由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“leetcode第216题组合总和Ⅲ”
上一篇
GPIO概念
下一篇
MySQL中的共享锁和排他锁