递归树:
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> combine(int n, int k) {
vector<int> v;
dfs(v,1,n,k,0);
return res;
}
void dfs(vector<int> v, int index, int n, int k, int count){
if(count==k){
res.push_back(v);
return;
}
for(int i=index;i<=n;i++){
v.push_back(i);
dfs(v,i+1,n,k,count+1);
v.pop_back();
}
}
};
每个元素可以选和不选
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> v;
dfs(nums,v,0);
return res;
}
void dfs(vector<int> &nums, vector<int> v, int index){
for(int i=index;i<nums.size();i++){
v.push_back(nums[i]);
dfs(nums,v,i+1);
v.pop_back();
}
res.push_back(v);
}
};
class Solution {
public:
vector<vector<int>> res;
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int> v;
dfs(nums,v,0);
return res;
}
void dfs(vector<int> &nums, vector<int> v, int index){
for(int i=index;i<nums.size();i++){
if(i>index&&nums[i]==nums[i-1]) continue;
v.push_back(nums[i]);
dfs(nums,v,i+1);
v.pop_back();
}
res.push_back(v);
}
};