leetcode 90 subsets-ii 子集II
阿新 • • 發佈:2019-02-07
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