Given a collection of integers that might contain duplicates, 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,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
class Solution { public: vector<vector<int> > subsetsWithDup(vector<int> &S) { int len = S.size(); vector<int> temp,tempIndex; vector<vector<int> > res,resIndex; res.push_back(temp); resIndex.push_back(tempIndex); if(len<=0) return res; queue<vector<int> > q,qIndex;//bfs q.push(temp); qIndex.push(tempIndex); while(!q.empty()){ temp = q.front(); tempIndex = qIndex.front(); qIndex.pop(); q.pop(); vector<int> temp0 =temp; vector<int> tempIndex0 = tempIndex; for(int i=0;i<len;i++){ if(find(tempIndex.begin(),tempIndex.end(),i)==tempIndex.end()){ tempIndex.push_back(i); temp.push_back(S[i]); sort(temp.begin(),temp.end()); if(find(res.begin(),res.end(),temp)==res.end()){ res.push_back(temp); resIndex.push_back(tempIndex); q.push(temp); qIndex.push(tempIndex); } tempIndex = tempIndex0; temp = temp0; } }//end for }//end while return res; } };