Combinations

Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.

For example,
If n = 4 and k = 2, a solution is:

[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

解法一:递归

递推点:加入i后,下一个加入的元素需要遍历i+1~n

因此可以基于k做递归。

base case: k==cur.size(),此时cur即为符合条件的一个集合。

class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > ret;
vector<int> cur;
Helper(ret, cur, k, , n);
return ret;
}
void Helper(vector<vector<int> >& ret, vector<int> cur, int k, int pos, int n)
{
if(cur.size() == k)
ret.push_back(cur);
else
{
for(int i = pos; i <= n; i ++)
{
cur.push_back(i);
Helper(ret, cur, k, i+, n);
cur.pop_back();
}
}
}
};

解法二:非递归

遍历子集过程中,大小为k的子集即为所需集合。

注意略去大小超过k的子集,若不然存储所有子集需要2^n空间。

子集遍历法参考Subsets

class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > ret;
vector<vector<int> > subsets;
vector<int> cur; //empty set
//check all subsets with k elements
subsets.push_back(cur);
for(int i = ; i <= n; i ++)
{//all element put into all subsets in ret
int size = subsets.size();
for(int j = ; j < size; j ++)
{
cur = subsets[j];
if(cur.size() >= k)
continue;
cur.push_back(i);
if(cur.size() == k)
ret.push_back(cur);
else
//cur.size() < k
subsets.push_back(cur);
}
}
return ret;
}
};

最新文章

  1. (转)如何在一台电脑上开启多个tomcat 和配置让系统识别哪个具体的tomcat
  2. mac使用指南:brew的安装
  3. Java 存储过程调用
  4. Win8驱动测试模式
  5. poj - 3723 Conscription(最大权森林)
  6. duilib中ListCtrl控件的实现
  7. 如何学习ios开发
  8. JavaScript正则验证数字、英文、电话号、身份证号、邮箱地址、链接地址等
  9. 【Linux探索之旅】第一部分第五课:Unity桌面,人生若只如初见
  10. MySQL检查连接的最大数量和改变的最大连接数
  11. 8.非关系型数据库(Nosql)之mongodb的应用场景
  12. 消息队列_MSMQ(2)简单应用
  13. 【Luogu3731】[HAOI2017]新型城市化(网络流,Tarjan)
  14. CSS实现自适应九宫格布局 大全
  15. windows 安装nvm步骤(shi&#39;yongnvm-windows管理node版本):
  16. Python3多线程之间的执行顺序问题
  17. Android RecycleView 的优化
  18. BI实战派:医疗BI项目落地方案
  19. PHPCMS的产品筛选功能
  20. chm转换为html文件

热门文章

  1. 套题:Codeforces Round #194 (Div. 1) (2/5)
  2. csv文件导入到mysql
  3. Python中进程无法结束的处理办法
  4. Ruby入门(1)——windows下Ruby开发环境搭建
  5. HDU 4493 Tutor (水题)
  6. linux下启动tomcat出现“This file is needed to run this program ”
  7. TortoiseSVN 冲突解决详细步骤 (图)
  8. 针对ie的hack
  9. Python学习(五)函数 —— 内置函数 lambda filter map reduce
  10. js 获取url的get传值函数