首页 > 代码库 > [LeetCode] Subsets II

[LeetCode] Subsets II

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;    }};