原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目描述
给定两个整数
n
和k
,返回1 ... n
中所有可能的k
个数的组合。
输入描述
1 <= n <= 20
1 <= k <= n
样例1:
输入
n = 4, k = 2
输出
[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
cpp
class Solution {
public:
int arr[20+5];//记录数组
vector<vector<int>>res;
void dfs(int num,int id,int &k,int &n){//num:存了几个数 id:数到哪了
arr[num] = id;
if(num > k) return ;
if(num+1 == k){
vector<int>temp;
for(int i=0;i<=num;i++){
temp.push_back(arr[i]);
}
res.push_back(temp);
return ;
}
num++;
for(int i = id+1;i <= n;i++){//比当前数字大的都尝试一遍
dfs(num,i,k,n);
}
}
vector<vector<int>> combine(int n, int k) {
if(n==k){
vector<int>temp;
for(int i=1;i<=n;i++) temp.push_back(i);
res.push_back(temp);
}else{
for(int i=1;i<=n-k+1;i++){
dfs(0,i,k,n);
}
}
return res;
}
};