78.子集 (Medium)*
题目描述*

标签*
回溯算法;
思路 & 代码*
回溯,只不过加入到结果集的条件改变。
还可以用位运算,用位标记元素是否在子集中出现。
class Solution {
private:
vector<vector<int>> res;
int n;
public:
vector<vector<int>> subsets(vector<int>& nums) {
n = nums.size();
if(n == 0) {
return {{}};
}
vector<int> path;
backtrack(nums, 0, path);
return res;
}
void backtrack(vector<int>& nums, int idx, vector<int>& path) {
res.push_back(path);
for(int i = idx; i < n; i++) {
path.push_back(nums[i]);
backtrack(nums, i + 1, path);
path.pop_back();
}
}
};
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
int n = nums.size();
int len = 1 << n;
for(int i = 0; i < len; 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;
}
};
最后更新: July 23, 2022