给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]
算法:基础的dfs题目。我们在枚举的时候可以考虑选和不选两种情况即可。
class Solution {
public:
vector<vector<
int>>
res;
void dfs(
int u,
int sum,
int state,
int n,
int k){
if(sum+n-u<k)
return ;
if(sum==
k){
vector<
int>
path;
for(
int i=
0;i<n;i++
)
if(state>>i&
1)
path.push_back(i+
1);
res.push_back(path);
return ;
}
dfs(u+
1,sum+
1,state|(
1 <<
u),n,k);
dfs(u+
1,sum,state,n,k);
}
vector<vector<
int>> combine(
int n,
int k) {
dfs(0,
0,
0,n,k);
return res;
}
};
转载于:https://www.cnblogs.com/programyang/p/11154040.html