地址:http://oj.leetcode.com/problems/subsets/
Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution
is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]思路:用递归来解决,S的size为n,则一共有2的n次方的子集合,之所以是这样,就是因为对于S中的每一个元素,都可以出现或者不出现在某个集合中。
参考代码:
vector<vector<int> >res;
void func(vector<int>&vec, vector<int>subres)
{
if(vec.empty())
{
sort(subres.begin(), subres.end());
res.push_back(subres);
return;
}
vector<int>subvec(vec.begin(), vec.end()-1);
subres.push_back(vec.back());
func(subvec, subres);
subres.pop_back();
func(subvec, subres);
}
class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
res.clear();
if(!S.empty())
{
vector<int>subres;
func(S, subres);
}
return res;
}
};