Combinations

原创 2015年11月19日 10:17:40

题目名称
Merge Sorted ArrayLeetCode链接

描述
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: Ryan
Date: 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=3
int 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;
}

总结
  运行结果如下:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。如果转载一定要通知博主哦~~

Python使用combinations实现排列组合

Python使用combinations实现排列组合    好久没有写博客了!昨天小牛在上海举办了牛友见面会,现场优惠还是比较大,心仪已久加上一时脑热就入手了。以为会有多么开心,其实目前最大的感受就是...
  • xiaoyu90520
  • xiaoyu90520
  • 2017年07月30日 17:25
  • 704

java对象的内存分配入口

一.GC策略检查        JVM在
  • xhh198781
  • xhh198781
  • 2014年11月01日 19:34
  • 3316

LeetCodet题解--17. Letter Combinations of a Phone Number(所有数字键盘组合所对应的所有字符集合)

链接 LeetCode题目:https://leetcode.com/problems/letter-combinations-of-a-phone-number/ GitHub代码:h...
  • gatieme
  • gatieme
  • 2016年04月07日 16:53
  • 1549

combinations 经典排列算法

【题目】 Given two integers  n  and  k , return all possible combinations of  k  numbers out of 1 ....
  • haihaa
  • haihaa
  • 2016年05月10日 21:07
  • 186

Combinations(组合)

题目 Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For e...
  • Boyhou
  • Boyhou
  • 2013年07月19日 00:02
  • 792

【LeetCode-面试算法经典-Java实现】【216-Combination Sum III (组合数的和)】

【216-Combination Sum III (组合数的和)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】代码下载【https://github.com/Wang-Jun-...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月28日 06:58
  • 3547

Combinations(组合计数)

Link:http://poj.org/problem?id=1306 Combinations Time Limit: 1000MS   Me...
  • Enjoying_Science
  • Enjoying_Science
  • 2015年03月17日 15:03
  • 553

leetcode Combinations计算有多少组合

典型的递归回溯法,多做形成这个递归回溯头脑,就好办了。 1 递归一次,填入一个数字 2 填入的数字,不能是小于当前数字的值,防止重复 3 回溯:记得pop_back()最后加上的一个数字,回溯到上一层...
  • kenden23
  • kenden23
  • 2013年12月24日 08:26
  • 4560

leetcode:暴力枚举法之Combinations

leetcode:暴力枚举法之Combinations 题目; Given two integers n and k, return all possible combinations of k nu...
  • what_lei
  • what_lei
  • 2016年08月15日 11:08
  • 231

8.5—暴力枚举法—Combinations

描述 Given two integers n and k, return all possible combinations of k numbers out of 1...n. For examp...
  • seu_nuaa_zc
  • seu_nuaa_zc
  • 2017年08月10日 12:18
  • 74
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Combinations
举报原因:
原因补充:

(最多只允许输入30个字)