Combinations

Total Accepted: 10949 Total Submissions: 36507My Submissions

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],
]


解法1。2: DFS遍历全部组合。注意推断当前cur的长度以及当前能够值的状态能否够继续
解法3,4:用next(prev) permutation来实现获取全部组合
解法5: 类似非递归的DFS(或者能够想象成为整数逐步加1进位,遍历全部可能数值)来编译状态
解法6:长度从1到k,每次把全部长度为i- 1的已有组合遍历一次。取全部可能的组合形成长度为i的全部组合(题目要求从小到大。这也为我们这样实现提供的根据)

class Solution {
public:vector<vector<int> > combine(int n, int k) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.vector<vector<int>> ret;if (k < 1 || k > n) return ret;// 1/*vector<int> cur;genCombination1(ret, cur, n, k, 1);*/// 2/*vector<int> cur;genCombination2(ret, cur, n, k, 1);*/// 3/*vector<int> flag(n, 0);for (int i = 0; i < k; ++i) {flag[i] = 1;}do {ret.push_back(vector<int>());auto it = back_inserter(ret.back());for (int i = 0; i < n; ++i) {if (flag[i] == 1) it = i + 1;}//} while (prev_permutation(flag.begin(), flag.end()));} while (m_prev_permutation(flag));*/// 4/*vector<int> flag(n, 0);for (int i = n - k; i < n; ++i) {flag[i] = 1;}do {ret.push_back(vector<int>());auto it = back_inserter(ret.back());for (int i = 0; i < n; ++i) {if (flag[i] == 1) it = i + 1;}//} while (next_permutation(flag.begin(), flag.end()));} while (m_next_permutation(flag));*/// 5/*vector<int> lo(k, 0), hi(k, 0);for (int i = 1; i <= k; ++i) {lo[i - 1] = i;hi[i - 1] = n - k + i;}while (true) {ret.push_back(lo);int cpos = k - 1;while (cpos >= 0) {if (lo[cpos] < hi[cpos]) {++lo[cpos];for (int i = cpos + 1; i < k; ++i) {lo[i] = lo[i - 1] + 1;}break;}--cpos;}if (cpos < 0) break;}*/// 6for (int i = 1; i <= n - k + 1; ++i) {ret.push_back(vector<int>(1, i));}for (int i = 2; i <= k; ++i) {int cnt = ret.size();for (int j = 0; j < cnt; ++j) {int cval = ret[j].back();int lastval = n - k + i;for (int t = cval + 1; t < lastval; ++t) {ret.push_back(ret[j]);ret.back().push_back(t);}ret[j].push_back(lastval);}}return ret;}private:void genCombination1(vector<vector<int>> &ret, vector<int> &cur, int n, int k, int cval) {if (n - cval + 1 < k - cur.size()) return;if (cur.size() == k) {ret.push_back(cur);return;}cur.push_back(cval);genCombination1(ret, cur, n, k, cval + 1);cur.pop_back();genCombination1(ret, cur, n, k, cval + 1);}void genCombination2(vector<vector<int>> &ret, vector<int> &cur, int n, int k, int cval) {int cnt = cur.size();if (cnt == k) {ret.push_back(cur);return;}for (int i = cval; i <= n - k + cnt + 1; ++i) {cur.push_back(i);genCombination2(ret, cur, n, k, i + 1);cur.pop_back();}}bool m_prev_permutation(vector<int> &f) {for (int i = f.size() - 1; i > 0; --i) {if (f[i] >= f[i - 1]) continue;int spos = i;for (int j = spos + 1; j < f.size(); ++j) {if (f[j] >= f[spos] && f[j] < f[i - 1])spos = j;}swap(f[spos], f[i - 1]);reverse(f.begin() + i, f.end());return true;}return false;}bool m_next_permutation(vector<int> &f) {for (int i = f.size() - 1; i > 0; --i) {if (f[i] <= f[i - 1]) continue;int spos = i;for (int j = spos + 1; j < f.size(); ++j) {if (f[j] > f[i - 1] && f[j] <= f[spos])spos = j;}swap(f[spos], f[i - 1]);reverse(f.begin() + i, f.end());return true;}return false;}
};

Combinations相关推荐

  1. [Leetcode] Combinations 组合数

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

  2. LeetCode 17. Letter Combinations of a Phone Number--笔试题--C++,Python解法

    题目地址:Letter Combinations of a Phone Number - LeetCode Given a string containing digits from 2-9 incl ...

  3. LeetCode-17-Letter Combinations of a Phone Number

    算法描述: Given a string containing digits from 2-9 inclusive, return all possible letter combinations t ...

  4. itertools库 combinations() 和 permutations() 组合 和 排列选项的方法

    combinations方法重点在组合,permutations方法重在排列. combinations和permutations返回的是对象地址,原因是在python3里面,返回值已经不再是list ...

  5. LeetCode Combinations (组合)

    问题:给出n,k,要求输出从1到n选取k个数的所有组合 思路:使用dfs,第一层是从1到n中选取一个数,第二层是从基于上一层选取的数+1到n中选取一个数,依次类推. 具体代码参考: https://g ...

  6. leetcode算法题--Combinations

    原题链接:https://leetcode.com/problems/combinations/ class Solution {public:vector<vector<int>& ...

  7. Combinations leetcode java

    题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...

  8. Python -itertools模块combinations方法

    itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序. 例1 ...

  9. itertools mode 之 combinations用法

    itertools mode 中 combinations的功能: from itertools import combinationsprint list(combinations(list,r)) ...

最新文章

  1. JAVA学习资源网站
  2. 【转载】WinCE中串口驱动及接口函数介绍
  3. 前端开发工程师养成记
  4. 华为怎么删除自带的音乐_原来华为手机相册隐藏剪辑功能!按下这个开关,还能制作音乐相册...
  5. mybatisplus 一次性执行多条SQL语句插入(Mysql篇)
  6. Java数据库篇5——事务
  7. 部署mysql MHA集群
  8. python3 dict 排序_Python 3.9 新增功能展望
  9. 解释Linux进程的父子关系,Linux进程管理
  10. 魔兽支持宽屏--怎样让宽屏支持更多游戏?
  11. 客户信息管理系统4—客户信息的查询
  12. 微信公众号之微信认证
  13. 新倩女幽魂服务器维护,《倩女幽魂Online》更新公告(版本1.0.23)
  14. embed预览pdf_09.html使用iframe、embed查看pdf不显示(未解决),使用pdf.js预览pdf
  15. 如何实现 iOS 短视频跨页面的无痕续播?
  16. 《网络攻防》第二周作业
  17. 互联网时代“陨落”,国家发布元宇宙战略的信号对失业和担心失业的我们带来了什么启迪?
  18. lol老是闪退到桌面_lol闪退到桌面怎么解决
  19. 使用飞信SDK开发短信收发程序
  20. Win10下用VS2017编译live555

热门文章

  1. Python几个简单好用的基础功能
  2. 【阿里云课程】详解深度学习优化:参数初始化,激活函数,标准化,池化
  3. 【杂谈】为什么你在有三AI看不到最新论文的解读,其实一直都有的
  4. 为什么应该放弃或减少使用MD5
  5. oracle访问远程db2,如何在DB2与Oracle之间实现远程拷贝(二)
  6. m4a录音文件损坏修复_电脑录音软件哪个好?分享这款录音软件,供你参考!
  7. 迈好“转战”第一步-丰收节交易会·陶以平: 谋定乡村振兴
  8. 推送:腾迅信鸽 VS Bmob
  9. Java基础学习网站收藏
  10. Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类