78. 子集
https://leetcode-cn.com/problems/subsets/submissions/
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
class Solution {
public:
void generate(int i,vector<int>& nums,vector<int>& item,vector<vector<int>>& res){
if(i >= nums.size())
return;
//选择放入i个元素
item.push_back(nums[i]);
res.push_back(item);
generate(i+1,nums,item,res);
//不放入nums[i]
item.pop_back();
generate(i+1,nums,item,res);
}
//可以利用循环,也可以利用dfs+回溯
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> item;
vector<vector<int>> res;
res.push_back(item);
generate(0,nums,item,res);
return res;
}
};
位运算法

class Solution {
public:
//法二 位运算法
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
int all_set = pow(2,nums.size());
for(int i=0;i<all_set;i++){
vector<int> item;
for(int j=0;j<nums.size();j++){
int set = 1;
set = set << (nums.size()-j-1);
if(set & i){
item.push_back(nums[j]);
}
}
res.push_back(item);
}
return res;
}
};
浙公网安备 33010602011771号