77. Combinations
2016-05-22 10:16
190 查看
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:
题意:给出n和k,输出1-n之间的长度为k的组合。
思路:递归。中间进行了数组的复制,beats 3.57%
思路2:回溯,beats: 27.43%
For example,
If n = 4 and k = 2, a solution is:
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
题意:给出n和k,输出1-n之间的长度为k的组合。
思路:递归。中间进行了数组的复制,beats 3.57%
class Solution { public: vector<vector<int>> combine(int n, int k) { vector<int> tmp; vector<vector<int>> res; recursion(n, k, tmp, res); return res; } void recursion(int n, int k, vector<int> tmp, vector<vector<int>>&res){ if (tmp.size() == k){ res.push_back(tmp); return; } if (tmp.empty()){ for (int i = 1; i <= n; i++){ vector<int> myvec; myvec.push_back(i); recursion(n, k, myvec, res); } } else{ int begin = tmp[tmp.size() - 1]; for (int i = begin + 1; i <= n; i++){ vector<int> myvec(tmp); myvec.push_back(i); recursion(n, k, myvec, res); } } } };
思路2:回溯,beats: 27.43%
class Solution { public: vector<vector<int>> combine(int n, int k) { vector<int> tmp; vector<vector<int>> res; recursion(n, k, tmp, res); return res; } void recursion(int n, int k, vector<int>& tmp, vector<vector<int>>&res){ if (tmp.size() == k){ res.push_back(tmp); return; } if (tmp.empty()){ for (int i = 1; i <= n; i++){ tmp.push_back(i); recursion(n, k, tmp, res); tmp.pop_back(); } } else{ int begin = tmp[tmp.size() - 1]; for (int i = begin + 1; i <= n; i++){ tmp.push_back(i); recursion(n, k, tmp, res); tmp.pop_back(); } } } };思路3:更好的剪枝处理,beats: 79.80%
class Solution { public: vector<vector<int>> combine(int n, int k) { vector<int> tmp; vector<vector<int>> res; recursion(n, k, tmp, res); return res; } void recursion(int n, int k, vector<int>& tmp, vector<vector<int>>&res){ if (tmp.size() == k){ res.push_back(tmp); return; } if (tmp.empty()){ for (int i = 1; i <= n-k+1; i++){ tmp.push_back(i); recursion(n, k, tmp, res); tmp.pop_back(); } } else{ int begin = tmp[tmp.size() - 1]; for (int i = begin + 1; i <= n-(k-tmp.size())+1; i++){ tmp.push_back(i); recursion(n, k, tmp, res); tmp.pop_back(); } } } };
相关文章推荐
- TCP协议与UDP协议的区别
- Programming Scala 第6章 demo04 重用函数值
- android开发-启动界面帧动画
- Python学习总结:目录
- 一起talk C栗子吧(第一百五十三回:C语言实例--socket通信地址系统调用一)
- 单链表的反转(递归)
- Frequent Pattern 挖掘之二(FP Growth算法)(转)
- Oracle内连接、外连接、右外连接、全外连接小总结
- LeetCode:Excel Sheet Column Number
- ubuntu删除mysql重装mysql亲测没有任何问题
- application、session、request和page的作用范围
- Class.forName()用法详解
- OpenStack通用技术——消息总线
- Linux java安装 eclipse安装
- c++第6次实验-数组操作
- ACM--模拟--湘大OJ 1184--A Love Letter--水
- 通过SSH远程使用jupyter notebook
- Eclipse: class file editor: source not found 问题解决办法
- MathJax 支持的 Latex 符号总结(各种箭头符号)
- 《程序员面试笔试宝典》学习笔记(六)操作系统