LeetCode 77.组合
给定两个整数 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; } };