前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-77-组合

leetcode-77-组合

作者头像
chenjx85
发布2018-08-30 17:21:57
7070
发布2018-08-30 17:21:57
举报

题目描述:

给定两个整数 n 和 k,返回 1 ... 中所有可能的 k 个数的组合。

示例:

代码语言:javascript
复制
输入: n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

要完成的函数:

vector<vector<int>> combine(int n, int k) 

说明:

1、这道题给定两个int型整数n和k,要求在[1,n]的闭区间中找到k个整数的组合(组合也就是不重复的)。

比如n=4,k=2,那么所有的组合是 [1,2] [1,3] [1 4] [2,3] [2,4] [3,4]。

把每一个组合放在一个一维vector中,所有的组合存储在二维的vector中,最后返回这个二维的vector。

2、这道题目也是一道递归的题目,我们依然用熟悉的方法来做。

代码如下(附详解):

代码语言:javascript
复制
    vector<vector<int>>res;//全局变量,最终要返回的二维vector
    vector<int>res1;//全局变量,存储每一个可能的组合
    void digui(int n,int k,int index)
    {
        if(k==0)//退出条件,当前没有数要加入了
        {
            res.push_back(res1);
            return;
        }
        for(int i=index;i<=n-k+1;i++)//不断地循环,注意i的范围,比如n=4,k=2的时候,i最大也只能取3,不能取4
        {
            res1.push_back(i);
            digui(n,k-1,i+1);//k减1,少了一个要添加的数,i加1,从下一个坐标开始
            res1.pop_back();
        }
    }
    vector<vector<int>> combine(int n, int k) 
    {
        digui(n,k,1);//直接进入递归函数,k表示当前还有几个数要加入,1表示当前要从1开始
        return res;//返回最终的二维vector
    }

上述代码实测56ms,beats 99.55% of cpp submissions。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 要完成的函数:
  • 说明:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档