[刷题] 77 Combinations
要求
- 给出两个整数n和k,在n个数字中选出k个数字的所有组合
示例
- n=4 , k=2
- [ [ 1, 2 ] , [ 1, 3 ] , [ 1, 4 ] , [ 2, 3 ] , [ 2, 4 ] , [ 3, 4 ] ]
思路
实现
- combine():求解C(n,k)
- generateCombinations():递归求解
- res:二维向量,保存已经找到的组合
- start:整型,开始搜索的位置
- c:向量,已经找到的组合
1 class Solution {
2
3 private:
4 vector<vector<int>> res;
5
6 // 求解C(n,k),当前已经找到的组合存在c中,从start开始搜索新元素
7 void generateCombinations(int n , int k , int start, vector<int> &c){
8
9 if( c.size() == k ){
10 res.push_back(c);
11 return;
12 }
13
14 for( int i = start ; i <= n ; i ++ ){
15 c.push_back(i);
16 generateCombinations(n, k, i + 1, c);
17 // 回溯
18 c.pop_back();
19 }
20 return;
21 }
22 public:
23 vector<vector<int>> combine(int n, int k) {
24 res.clear();
25 if( n <= 0 || k <= 0 || k > n)
26 return res;
27 vector<int> c;
28 generateCombinations(n, k, 1, c);
29
30 return res;
31 }
32 };
优化
- 剪枝:为递归树剪去不需要搜索的分支
- 如上图中取4的分支
- 当k(递归层数)较大时优化效果明显
1 class Solution {
2
3 private:
4 vector<vector<int>> res;
5
6 // 求解C(n,k),当前已经找到的组合存在c中,从start开始搜索新元素
7 void generateCombinations(int n , int k , int start, vector<int> &c){
8
9 if( c.size() == k ){
10 res.push_back(c);
11 return;
12 }
13
14 // 进入函数时还有k-c.size()个空位
15 // 所以[i...n]中至少要有k-c.size()个元素
16 // 故i最多为 n - (k-c.size()) + 1
17 for( int i = start ; i <= n - (k-c.size()) + 1 ; i ++ ){
18 c.push_back(i);
19 generateCombinations(n, k, i + 1, c);
20 // 回溯
21 c.pop_back();
22 }
23 return;
24 }
25 public:
26 vector<vector<int>> combine(int n, int k) {
27 res.clear();
28 if( n <= 0 || k <= 0 || k > n)
29 return res;
30 vector<int> c;
31 generateCombinations(n, k, 1, c);
32
33 return res;
34 }
35 };
相关
- 39 Combination Sum
- 40 Combination Sum II
- 216 Combination Sum III
- 78 Subsets
- 90 Subsets II
- 401 Binary Watch
[刷题] 77 Combinations的更多相关文章
- leetcode刷题-77组合
题目 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 示例: 输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3 ...
- Leetcode OJ 刷题
Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...
- leetcode刷题指南
转载自:http://blog.csdn.net/lnho2015/article/details/50962989 以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目 ...
- leetcode 刷题记录(java)-持续更新
最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...
- 【刷题记录】BZOJ-USACO
接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...
- [LeetCode] 系统刷题5_Dynamic Programming
Dynamic Programming 实际上是[LeetCode] 系统刷题4_Binary Tree & Divide and Conquer的基础上,加上记忆化的过程.就是说,如果这个题 ...
- C#LeetCode刷题-回溯算法
回溯算法篇 # 题名 刷题 通过率 难度 10 正则表达式匹配 18.8% 困难 17 电话号码的字母组合 43.8% 中等 22 括号生成 64.9% 中等 37 解数独 45.8% ...
- leetcode刷题目录
leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...
- LeetCode刷题系列
LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...
随机推荐
- Redis 超详细自动管理Cluster集群工具上手 redis-trib.rb (多图,手把手)
安装介绍 redis-trib.rb是一款由Redis官方提供的集群管理工具,能够大量减少集群搭建的时间. 除此之外,还能够简化集群的检查.槽迁徙.负载均衡等常见的运维操作,但是使用前必须要安 ...
- IDEA 主题下载
IDEA中主题可以更换,大家可以直接到 http://www.riaway.com/ 网站或 http://color-themes.com/?view=index 网站,直接下载自己喜欢的主题. ...
- 我成为 Microsofti Azure MVP 啦!(ps:不是美国职业篮球)
一,引言 今天是个高兴的日子,早上10点左右收到了来自微软的MVP的礼包的快递,对我来说,这是一件很值得纪念的日子.所以今天就水一篇心得感想吧!!! 我是年前2月9号开始申请MVP的,经历了差不多1个 ...
- JavaWeb 补充(Filter&Listener)
目录 Filter:过滤器 Listener:监听器 Filter:过滤器 1. 概念: * 生活中的过滤器:净水器,空气净化器,土匪. * web中的过滤器:当访问服务器的资源时,过 ...
- Markdown排版介绍
如何排版章节 Markdown: 大标题 ========== 小标题 ---------- # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 例如 三级 和四级 发布后的效果: 三 ...
- Azure data studio 跨平台数据库管理工具试用
最近折腾 azure sql database 的时候发现了微软的一款新的数据库管理工具: azure data studio.从名字上看 azure data studio 好像是专门为 azure ...
- 《深入理解计算机系统》学习笔记整理(CSAPP 学习笔记)
简介 本笔记目前已包含 CSAPP 中除第四章(处理器部分)外的其他各章节,但部分章节的笔记尚未整理完全.未整理完成的部分包括:ch3.ch11.ch12 的后面几小节:ch5 的大部分. 我在整理笔 ...
- Python 面像对象编程(上)
一: 对象的概念 "面向对象"的核心是"对象"二字,而对象的精髓在于"整合",什么意思? 所有的程序都是由"数据"与&q ...
- 01-Verilog基本语法元素
不知道能不能更新完,毕竟咱学校计院对硬件向来不太重视,现在对竞赛也不咋地重视了,也不加分,也没啥用.嘛,就随便写写玩玩吧. 一只狸无聊的时候对Verilog的业余描述笔记:以<Verilog数字 ...
- 1058 A+B in Hogwarts
If you are a fan of Harry Potter, you would know the world of magic has its own currency system -- a ...