- 姐妹题 LQ77
- 枚举1
- 优化版枚举
- 具体 https://blog.csdn.net/kdazhe/article/details/113728021
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
int n = nums.size();
int x = (1 << n) - 1;
res.push_back({});
for(int i = x; i; i = (i - 1) & x){
vector<int> tmp;
for(int j = 0; j < n; j ++){
if(i >> j & 1) tmp.push_back(nums[j]);
}
res.push_back(tmp);
}
return res;
}
};
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
vector<vector<int>> res;
for(int i = 0; i < 1 << n; i ++){
vector<int> tmp;
for(int j = 0; j < n; j ++){
if(i >> j & 1){
tmp.push_back(nums[j]);
}
}
res.push_back(tmp);
}
return res;
}
};
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
vector<vector<int>> res;
for(int i=0; i<1<<n; i++){
int tmp = i;
int record = n-1;
vector<int> tmpres;
while(tmp){
if(tmp&1) tmpres.push_back(nums[record]);
tmp=tmp>>1;
record --;
}
res.push_back(tmpres);
}
return res;
}
};
class Solution {
public:
vector<vector<int>> res;
vector<int> track;
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
backtrack(0, n, nums);
return res;
}
void backtrack(int start,int n, vector<int>& nums){
res.push_back(track);
for(int i=start; i<n; i++){
track.push_back(nums[i]);
backtrack(i+1, n, nums);
track.pop_back();
}
}
};