Leetcode_c++: Subsets II (090)

来源:互联网 发布:蜂窝数据漫游是什么 编辑:程序博客网 时间:2024/09/21 09:25

题目

Given a collection of integers that might contain duplicates, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,
If nums = [1,2,2], a solution is:

[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]


算法

和Subsets I的唯一区别就是添加了两行去重的代码。
http://blog.csdn.net/doc_sgl/article/details/12260731


#include<iostream>#include<vector>#include<stack>#include <algorithm>using namespace std;const int N=0;class Solution {    void findsubset(vector<int> s, int index, vector<int> &subset, vector<vector<int> > &res)      {          res.push_back(subset);          for(int i = index; i< s.size(); i++)          {              if(i!=index && s[i]==s[i-1])continue;              subset.push_back(s[i]);              findsubset(s,i+1,subset,res);              subset.pop_back();          }      }  public:    vector<vector<int> > subsetsWithDup(vector<int> &S) {          // Note: The Solution object is instantiated only once.          vector<vector<int> > res;          sort(S.begin(),S.end());          vector<int> subset;          findsubset(S,0,subset,res);          return res;      }  };
0 0