[leetcode 77] Combinations
2016-04-21 23:33
246 查看
Question:
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:
Subscribe to see which companies asked this question
分析:
如果N ==K和K==1不做解释;
一般情况N<K,时候,可以先求解(N-1,K-1)的情况,比如求(4,3)那么(3,2)的结果是:
【
【1,2】
【1,3】
【2,3】
】
对每一层的最后一个元素判断,比如第一层的最后一个元素为2,那么第一层后面可以添加3或者4;
第二层的最后一个元素是3,那么后面只能添加数据4;
第三层同样,只能添加4;
这样(4,3)的结果为:
【
【1,2,3】
【1,2,4】
【1,3,4】
【2,3,4】
】
代码如下:
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], ]
Subscribe to see which companies asked this question
分析:
如果N ==K和K==1不做解释;
一般情况N<K,时候,可以先求解(N-1,K-1)的情况,比如求(4,3)那么(3,2)的结果是:
【
【1,2】
【1,3】
【2,3】
】
对每一层的最后一个元素判断,比如第一层的最后一个元素为2,那么第一层后面可以添加3或者4;
第二层的最后一个元素是3,那么后面只能添加数据4;
第三层同样,只能添加4;
这样(4,3)的结果为:
【
【1,2,3】
【1,2,4】
【1,3,4】
【2,3,4】
】
代码如下:
<span style="font-size:14px;">class Solution { public: vector<vector<int>> combine(int n, int k) { vector<vector<int>> res; if(n < k || k == 0) return res; if(n == k){ vector<int> temp; for(int i = 1; i <= n; ++i){ temp.push_back(i); } res.push_back(temp); return res; } if(k == 1){ // for(int i = 1; i <= n; ++i){ vector<int> temp(1,i); res.push_back(temp); } return res; } else{ vector<vector<int>> pre; pre = combine(n-1,k-1); for(int i = 0; i < pre.size(); ++i){ int len = pre[i].size(); for(int j = pre[i][len-1]+1; j <=n ; ++j){ vector<int> temp = pre[i]; temp.push_back(j); res.push_back(temp); } } return res; } } };</span>
相关文章推荐
- C++第四次上机实验
- 1003-pie
- DH参数法建立机器人的运动学正解
- js动态添加datagrid表头&批量保存实战研究
- 学会使用Git和远程代码库
- tomcat服务器详解
- .NET中STAThread和MTAThread
- 20150115--SHOP项目架构+后台权限管理-02
- Eigen之矩阵与向量的乘积
- 欢迎使用CSDN-markdown编辑器
- AOP的一些实现机制
- 数据挖掘:概念与技术 笔记
- 暑期实习笔试总结
- Java Web基础知识之Listener:监控Servlet的每个动作
- MySQL索引原理及慢查询优化
- 关于iOS远程推送的那些事
- Java 重写与重载区别 Java父类的Object方法 要重写tostring原因,多个catch处理逻辑
- ios app开发步骤
- Python Requests 学习笔记
- 欢迎使用CSDN-markdown编辑器