12.26 2014
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], [] ]
class Solution {
public:
vector<vector<int> > subsets(vector<int> &S) {
vector<int> each;
vector<vector<int> > result;
result.push_back(each);
sort(S.begin(),S.end());
sub(S,0,each,result);
return result;
}
void sub(vector<int> &S, int index, vector<int> &each, vector<vector<int> > &result){
for(int i=index;i<S.size();i++){
each.push_back(S[i]);
result.push_back(each);
if(i<S.size()-1)
sub(S,i+1,each,result);
each.pop_back();
}
}
};
总结:
1. 该题目需要使用递归解题的思路,先要对S进行排序。
2. 当是最后一个元素时,只需要把他存入结果即可。当不是最后一个元素时,除了存入each,还需要进行递归。从他的下一位开始进行组合排列。
3. 关键点在于每push了一个元素进each以后要pop出来,这样子才能组合出多种可能子集。