Combinations
来源:互联网 发布:cms app 编辑:程序博客网 时间:2024/04/29 08:36
题目名称
Merge Sorted Array—LeetCode链接
描述
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],]
分析
这道题是组合问题,典型的回溯法问题,求出所有可行解,例如,当n=3时,问题的解空间为{ ( ), (1), (2), (3), (1, 2), (1, 3), (2, 3), (1, 2, 3)} ,根绝约束条件k的取值就能找出所有的可行解。
C++代码
/************************************************* Copyright: 武汉大学计算机学院B507 Author: RyanDate: 2015-11-19 Description: Combinations:Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. **************************************************/ #include<iostream>#include<vector>using namespace std;//一个重载的函数combine,这里是函数申明void combine(vector<vector<int> > &res,vector<int> &temp,int start,int num,int n ,int k);vector<vector<int> > combine(int n, int k) { vector<vector<int> >res; if(n<k)return res; vector<int> temp(0,k); combine(res,temp,0,0,n,k); return res;}/* * 参数说明: * res为所有解的向量; * temp表示一个可行解; * start表示每次搜索的子树根节点; * num表示已经搜索到的节点数目。 * 约束函数:num==k,这里表示已经搜索到了k个节点 */void combine(vector<vector<int> > &res,vector<int> &temp,int start,int num,int n ,int k){ if(num==k){ res.push_back(temp); return; } for(int i = start;i<n;i++){ temp.push_back(i+1); combine(res,temp,i+1,num+1,n,k); temp.pop_back(); }}//测试用例:n=4,k=3int main() { int n=4,k=3; vector<vector<int> > res = combine(n,k); cout<<"["<<endl; for(int i=0;i<res.size();i++) { cout<<" ["; for(int j=0;j<res[i].size();j++) { cout<<" "<<res[i][j]; } cout<<" ]"<<endl; } cout<<"]"<<endl; return 0;}
总结
运行结果如下:
0 0
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- Combinations
- combinations
- Combinations
- Combinations
- Combinations
- Combinations
- 为什么你的 App 没人用?请按这8条逐一对照
- jquery移动设备上的滑动事件
- 二分查找
- 14 款好用的 iOS 开发工具
- 怎么在Caffe中配置每一个层的结构
- Combinations
- 有种心情叫等待
- HDU ACM 1789 Doing Homework again
- bootstrap菜鸟教程之必须知道的bootstrap几个cdn加速点
- 简易计算器程序开发日志【更新中】
- Unable to find valid certification path to requested target
- android opencv 前置摄像头
- github配置ssh key
- 什么样的gpio才需要用can_sleep