码迷,mamicode.com
首页 > 其他好文 > 详细

216. 组合总和 III

时间:2019-11-03 01:13:57      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:nbsp   div   ||   ==   push   start   core   int   color   

题目:

找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。

说明:

所有数字都是正整数。
解集不能包含重复的组合。
示例 1:

输入: k = 3, n = 7

输出: [[1,2,4]]
示例 2:

输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]

代码:

 

 1 class Solution {
 2 public:
 3     vector<vector<int>> combinationSum3(int k, int n) {
 4 
 5         vector<vector<int>> ret;
 6         if(k > 9)
 7             return ret;
 8         if(n < (1+k)*k/2)
 9             return ret;
10         vector<int> temp;
11         combinationSum3Core(1,k,n,0,temp,ret);
12         return ret;    
13     }
14     void combinationSum3Core(int start,int k,int n,int curSum,vector<int> &temp,vector<vector<int>> &ret)
15     {
16         if(temp.size() == k)
17         {
18             if(curSum == n)
19                 ret.push_back(temp);
20             return;
21         }
22         //这条语句可以去掉,因为这个剪枝操作:9-i+1 < k-temp.size()
23         // if(start > 9)
24         //     return;
25         for(int i = start;i <= 9;i++)
26         {
27             if(curSum+i > n || 9-i+1 < k-temp.size())//剪枝
28                 return;
29             temp.push_back(i);
30             combinationSum3Core(i+1,k,n,curSum+i,temp,ret);
31             temp.pop_back();
32         }
33 
34     }
35 };

 

216. 组合总和 III

标签:nbsp   div   ||   ==   push   start   core   int   color   

原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11784815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!