链接
https://leetcode-cn.com/problems/combinations/
耗时
解题:13 min
题解:5 min
题意
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
思路
按顺序枚举,当暂存vector内元素数量为 k 时加入结果。
时间复杂度: O ( k ∗ C n k ) O(k*C_n^k) O(k∗Cnk)
AC代码
class Solution {
private:
vector<vector<int>> ans;
int n, all;
public:
void dfs(int s, int cnt, vector<int> tmp) {
if(cnt == all) {
ans.push_back(tmp);
return ;
}
for(int i = s; i <= n; ++i) {
tmp.push_back(i);
dfs(i+1, cnt+1, tmp);
tmp.pop_back();
}
}
vector<vector<int>> combine(int n, int k) {
this->n = n;
all = k;
dfs(1, 0, {});
return ans;
}
};