zoukankan      html  css  js  c++  java
  • [leetcode]Subsets II

    问题描写叙述:

    Given a collection of integers that might contain duplicates, S, 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 S = [1,2,2], a solution is:

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


    基本思路:

    此题是上一篇《Subsets》的一个变形,差别在于上一篇是对set中的元素求子集,而本篇是对集合中的元素求子集。集合中的元素可能有反复的元素。利用上一篇的方法产生的子集可能还有反复的子集。

    仅仅需在增加子集时查看是否已经包括了同样的子集就可以。


    代码:

    vector<vector<int> > subsetsWithDup(vector<int> &S) {  c++
            vector<vector<int> > result;
            map<vector<int>,int > vecMap;
            int size = S.size();
            //add empty subset
            vector<int> tmp;
            result.push_back(tmp);
            
            int bound = 1<<size;
            for(int i = 1; i < bound; i++){
                vector<int> vec;
                int num = i;
                for(int j = size; j > 0 && num >0; j-- ){
                    int tmp = (1 << j-1);
                    if(num >= tmp){
                        vec.push_back(S[j-1]);
                        num -= tmp;
                    }
                    
                }
                sort(vec.begin(),vec.end());
                if(vecMap.find(vec)== vecMap.end()){
                    result.push_back(vec);
                    vecMap.insert(make_pair(vec,1));   
                }
            }
            return result;
        }


  • 相关阅读:
    【2019/5/24】周进度报告
    第一阶段意见汇总以及改进
    【2019/5/18】周进度报告
    用户体验评价-搜狗输入法
    第二阶段冲刺1
    第十四周总结
    找水王
    第十三周总结
    程序员修炼之道-从小工到专家阅读笔记02
    第十二周总结
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6822343.html
Copyright © 2011-2022 走看看