#include <stdio.h>
#include <vector>
using namespace std;
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<int> item;
vector<vector<int> > result;
for(int i=0; i<nums.size(); i++)
{
item.push_back(nums[i]);
result.push_back(item);
}
for(int i=0; i<result.size(); i++)
{
for(int j=0; j<result[i].size(); j++)
printf("[%d]",result[i][j]);
printf("\n");
}
return 0;
}
[1]
[1][2]
[1][2][3]
#include <stdio.h>
#include <vector>
using namespace std;
void generate(int i,vector<int> &nums , vector<int> &item , vector<vector<int> > &result)
{
if(i >= nums.size())
{
return;
}
item.push_back(nums[i]);
result.push_back(item);
generate(i+1 , nums , item , result);
}
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<int> item;
vector<vector<int> > result;
generate(0 , nums , item , result);
for(int i=0; i<result.size(); i++)
{
for(int j=0; j<result[i].size(); j++)
printf("[%d]",result[i][j]);
printf("\n");
}
return 0;
}
[1]
[1][2]
[1][2][3]
方法1:
#include <stdio.h>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > subsets(vector<int>& nums) {
vector<vector<int> > result;
vector<int> item;
result.push_back(item);
generate(0,nums,item,result);
return result;
}
private:
void generate(int i,vector<int> &nums , vector<int> &item , vector<vector<int> > &result)
{
if(i>=nums.size())
{
return;
}
item.push_back(nums[i]);
result.push_back(item);
generate(i+1 , nums , item , result);
item.pop_back();
generate(i+1 , nums , item , result);
}
};
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<int> item;
Solution solve;
vector<vector<int> > result;
result = solve.subsets(nums);
// generate(0 , nums , item , result);
for(int i=0; i<result.size(); i++)
{
if(result[i].size() == 0)
{
printf("[]");
}
for(int j=0; j<result[i].size(); j++)
printf("[%d]",result[i][j]);
printf("\n");
}
return 0;
}
[]
[1]
[1][2]
[1][2][3]
[1][3]
[2]
[2][3]
[3]
方法二: 位运算
#include <stdio.h>
#include <vector>
using namespace std;
class Solution {
public:
vector<vector<int> > subsets(vector<int> &nums)
{
vector<vector<int> > result;
int all_set = 1<< nums.size();
for(int i=0; i<all_set; i++)
{
vector<int> item;
for(int j=0; j<nums.size(); j++)
{
if(i&(1<<j))
{
item.push_back(nums[j]);
}
}
result.push_back(item);
}
return result;
}
};
int main()
{
vector<int> nums;
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
vector<int> item;
Solution solve;
vector<vector<int> > result;
result = solve.subsets(nums);
// generate(0 , nums , item , result);
for(int i=0; i<result.size(); i++)
{
if(result[i].size() == 0)
{
printf("[]");
}
for(int j=0; j<result[i].size(); j++)
printf("[%d]",result[i][j]);
printf("\n");
}
return 0;
}
[]
[1]
[2]
[1][2]
[3]
[1][3]
[2][3]
[1][2][3]