【Leetcode】之Subset II

来源:互联网 发布:网络大电影演员收入 编辑:程序博客网 时间:2024/05/01 07:03

一.问题描述

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],  []]

二.我的解题思路

拿到这个题目,最直观的思路就是使用回溯法遍历,然后使用map或者set这样的结构来去除重复。先排序,采用回溯法(子集树+map)的结果如下:

class Solution {public:    vector<vector<int>> subsetsWithDup(vector<int>& nums) {        int len=nums.size();        sort(nums.begin(),nums.end());        vector<int> curr;        set<vector<int>> res;        map<vector<int>,int> flag;        int i=0;        gen_res(nums,curr,res,flag,i);        vector<vector<int>> ans;        set<vector<int>>::iterator it=res.begin();        for(;it!=res.end();it++)            ans.push_back(*it);        return ans;            }        void gen_res(vector<int>& nums, vector<int>& curr,set<vector<int>>& res,map<vector<int>,int>& flag, int i ){        int len=nums.size();        if(i>=len){                          res.insert(curr);               // flag[curr]=1;                return;            }                                curr.push_back(nums[i]);        gen_res(nums,curr,res,flag,i+1);        curr.pop_back();        gen_res(nums,curr,res,flag,i+1);                                    }        };




0 0