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], [] ]Array Backtracking Bit Manipulation
Have you met this question in a real interview?
Yes
No
回溯法~ 注意 对 vector<bool> flag初始化, 是push_back()... 而不能flag[i]... vector中只能有了元素后才能用数组下表方式访问!!!!
class Solution {
vector<vector<int> > ret;
void dfs(vector<int> &s, vector<bool> &flag, int curDep, int maxDep){
if(curDep==maxDep){
vector<int> ans;
for(int i=0;i<maxDep;i++){
if(flag[i])
ans.push_back(s[i]);
}
ret.push_back(ans);
return;
}
flag[curDep]=true;
dfs(s,flag,curDep+1,maxDep);
flag[curDep]=false;
dfs(s,flag,curDep+1,maxDep);
}
public:
vector<vector<int> > subsets(vector<int> &S) {
vector<bool> flag;
for(int i=0;i<S.size();i++)
flag.push_back(false);
sort(S.begin(),S.end());
dfs(S, flag, 0, S.size());
return ret;
}
};