Subsets
Given a set of distinct integers, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
Subscribe to see which companies asked this question
解题技巧:
采用递归的方法,对于每个元素存在放与不放的问题。
代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector< vector<int> > res;
void Find(vector<int>& nums, vector<int> res0, int n)
{
if(n == nums.size())
{
res.push_back(res0);
return;
}
for(int i = 0; i <= 1; i ++)
{
if(i == 1) res0.push_back(nums[n]);
Find(nums, res0, n+1);
}
}
vector< vector<int> > subsets(vector<int>& nums)
{
vector<int> res0;
sort(nums.begin(), nums.end());
Find(nums, res0, 0);
return res;
}
int main()
{
vector<int> nums;
int n;
while(cin >> n)
{
nums.push_back(n);
}
subsets(nums);
for(int i = 0; i < res.size(); i ++)
{
for(int j = 0; j < res[i].size(); j ++)
{
cout<<res[i][j]<<' ';
}
cout<<endl;
}
}