zoukankan      html  css  js  c++  java
  • leetcode-77-组合

    题目描述:

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

    示例:

    输入: 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、这道题目也是一道递归的题目,我们依然用熟悉的方法来做。

    代码如下(附详解):

        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。

  • 相关阅读:
    上周热点回顾(12.1212.18)
    上周热点回顾(11.2111.27)
    上周热点回顾(11.1411.20)
    博客园电子期刊2011年11月刊发布啦
    “CDN加速”测试
    上周热点回顾(11.2812.4)
    上周热点回顾(12.1912.25)
    上周热点回顾(12.512.11)
    提醒:安装MS11100 .NET Framework高危漏洞补丁一定要所有服务器一起安装
    郑州公积金
  • 原文地址:https://www.cnblogs.com/chenjx85/p/9502549.html
Copyright © 2011-2022 走看看