leetcode——90——Subsets II

来源:互联网 发布:捷易通软件官方网站 编辑:程序博客网 时间:2024/05/16 19:46
Given a collection of integers that might contain duplicates, nums, 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 nums = [1,2,2], a solution is:

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

在Subsets基础上去掉重复元素

方法一:

      在添加是去掉

class Solution {public:    vector<vector<int>>res;    vector<int>ans;    vector<vector<int>> subsetsWithDup(vector<int>& nums) {       if(nums.empty()) return res;       sort(nums.begin(), nums.end());       dfs(0, ans, nums);       return res;     }    void dfs(int k, vector<int>ans, vector<int> nums){        res.push_back(ans);        for(int i = k; i < nums.size(); i++){            if(i > k && nums[i] == nums[i - 1])               continue;            ans.push_back(nums[i]);            dfs(i + 1, ans, nums);            ans.pop_back();        }   }};

方法二:

       在结果中去掉

class Solution {public:    vector<vector<int> > subsetsWithDup(vector<int> &S) {        vector<vector<int> > result;        map<vector<int>, bool> m;        int size = S.size();        for(int i = 0; i < pow(2.0, size); i ++)        {            int tag = i;            vector<int> cur;            for(int j = size-1; j >= 0; j --)            {                if(!tag)                    break;                if(tag%2 == 1)                {                    cur.push_back(S[j]);                }                tag >>= 1;            }            sort(cur.begin(), cur.end());            if(m.find(cur) == m.end())             {                m[cur] = true;                result.push_back(cur);            }        }        return result;    }};


0 0
原创粉丝点击