子集
class Solution {
public:
vector<vector> subsets(vector& nums) {
//使用位运算的技巧
/*
vector<vector> result;
int len=nums.size();
int fanwei=pow(2,len);
for(int i=0;i<fanwei;++i)
{
vector temp;
for(int j=0;j<len;++j)
{
int a=1<<j;
if(a&i)
{
temp.push_back(nums[j]);
}
}
result.push_back(temp);
}
return result;
//直接使用回溯法进行遍历
*/
//再次使用位运算
vector<int> temp;
vector<vector<int>> result;
int len=nums.size();
int fanwei=pow(2,len);
for(int i=0;i<fanwei;++i)
{
for(int j=0;j<len;++j)
{
int a=1<<j;
if(a&i)
{
temp.push_back(nums[j]);
}
}
result.push_back(temp);
temp.clear();
}
//使用回溯法进行计算
/*
vector<vector<int> > result;
vector<int> temp;
int len=nums.size();
result.push_back(temp);
huisu(0,temp,result,nums);
*/
return result;
}
void huisu(int i,vector<int> &temp,vector<vector<int>> &result,vector<int> nums)
{
for(int j=i;j<nums.size();++j)
{
temp.push_back(nums[j]);
result.push_back(temp);
huisu(j+1,temp,result,nums);
temp.pop_back();
}
}
};