思路:先对原数组排个序,然后递归求解,注意重复元素的问题。
code:
class Solution {
public:
vector<vector<int> > solve(vector<int> &S){
vector<int> curRet;
vector<vector<int> > ret;
ret.push_back(curRet);
if(S.size() == 0)
return ret;
vector<int> leftS(S.begin()+1,S.end());
vector<vector<int> > leftRet = solve(leftS);
for(int i = 0;i < leftRet.size();i++)
if(leftRet[i].size() > 0) ret.push_back(leftRet[i]);
for(int i = 0;i < leftRet.size();i++){
leftRet[i].insert(leftRet[i].begin(),S[0]);
if(find(ret.begin(),ret.end(),leftRet[i]) == ret.end())
ret.push_back(leftRet[i]);
}
return ret;
}
vector<vector<int> > subsetsWithDup(vector<int> &S) {
vector<vector<int> > ret;
sort(S.begin(),S.end());
ret = solve(S);
return ret;
}
};