题目描述
给出两个整数n和k,返回从1到n中取k个数字的所有可能的组合
例如:
如果n=4,k=2,结果为
[↵ [2,4],↵ [3,4],↵ [2,3],↵ [1,2],↵ [1,3],↵ [1,4],↵]
解题思路
class Solution {
public:
vector<vector<int> > combine(int n, int k) {
vector<vector<int> > res;
vector<int> ans;
dfs(1, n, k, res, ans);
return res;
}
void dfs(int num, int n, int k, vector<vector<int> > &res, vector<int> &ans){
if( k == 0){ //k==0就不用再选了
res.push_back(ans);
return;
}
if(num > n) //num>n不符合要求
return;
ans.push_back(num); //选中该数
dfs(num+1, n, k - 1, res, ans); //从num+1到n中取k-1个数
ans.pop_back(); //将该数退出
dfs(num+1, n, k, res, ans); //从num+1到n中取k个数
}
};