1. 程式人生 > >leetcode 90 subsets-ii 子集II

leetcode 90 subsets-ii 子集II

class Solution {
public:
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        vector<vector<int> > res;
        vector<int> temp;
        sort(nums.begin(),nums.end());
        getSubsets(nums,0,temp,res);
        
        sort(res.begin(),res.end());
        vector<vector<int> >::iterator iter=unique(res.begin(),res.end());
        res.erase(iter,res.end());
        return res;
    }
    
    void getSubsets(vector<int> &S,int pos, vector<int> &out, vector<vector<int> > &ans){
        ans.push_back(out);
        for(int i=pos;i<S.size();i++){
            out.push_back(S[i]);
            getSubsets(S,i+1,out,ans);
            out.pop_back();
        }
    }
};

這道題與子集1多了一個處理步驟,那就是對vector的去重操作。

關於vector的去重操作,需要看的是這些

注:unique函式功能是去除相鄰的重複元素,注意是相鄰,所以必須先使用sort函式。還有一個容易忽視的特性是它並不真正把重複的元素刪除。之所以說比不真正把重複的元素刪除,因為unique實際上並沒有刪除任何元素,而是將無重複的元素複製到序列的前段,從而覆蓋相鄰的重複元素。unique返回的迭代器指向超出無重複的元素範圍末端的下一個位置。
https://blog.csdn.net/hellokandy/article/details/51317593