leetcode-77-组合
Posted chenjx85
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-77-组合相关的知识,希望对你有一定的参考价值。
题目描述:
给定两个整数 n 和 k,返回 1 ... n 中所有可能的 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。
以上是关于leetcode-77-组合的主要内容,如果未能解决你的问题,请参考以下文章