https://leetcode-cn.com/problems/subsets/
思路:因为nums中没有重复元素,所以通过位运算直接枚举即可,当然回溯法也可以。
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
int n=nums.size(),times=1<<n;
vector<vector<int>> ans(1,vector<int>());
for(int i=1;i<times;i++)
{
vector<int> tmp;
for(int j=0;j<n;j++)
if(i&(1<<j))
tmp.push_back(nums[j]);
ans.push_back(move(tmp));
}
return ans;
}
};
class Solution {
public:
vector<vector<int>> ans;
void dfs(vector<int>& tmp,vector<int>& nums,int idx)
{
if(idx==nums.size())
{
ans.push_back(tmp);
return;
}
tmp.push_back(nums[idx]);
dfs(tmp,nums,idx+1);
tmp.pop_back();
dfs(tmp,nums,idx+1);
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> tmp;
dfs(tmp,nums,0);
return ans;
}
};