zoukankan      html  css  js  c++  java
  • 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], [] ]

    class Solution {
    public:
        vector<vector<int> > subsetsWithDup(vector<int> &S) 
        {
            vector<int> keys;
            vector<int> count;
            //count pairs
            for(int i=0;i<S.size();i++)
            {
                int j=0;
                for(j=0;j<keys.size();j++)
                    if(keys[j]==S[i]) break;
                if(j==keys.size()) 
                {
                    keys.push_back(S[i]);
                    count.push_back(1);
                }
                else
                {
                    count[j]++;
                }
            }
            //sort pairs
            for(int i=0;i<keys.size();i++)
                for(int j=i+1;j<keys.size();j++)
                if(keys[i]>keys[j])
                {
                    int tmp=keys[i];
                    keys[i]=keys[j];
                    keys[j]=tmp;
                    tmp=count[i];
                    count[i]=count[j];
                    count[j]=tmp;
                }
                
            vector<int> v;
            for(int i=0;i<keys.size();i++) v.push_back(0);
            
            vector<vector<int>> result;
            generate(result,keys,count,v,0);
            return result;
        }
        
        void generate(vector<vector<int>>& result,vector<int>& keys,vector<int>& count,vector<int>& v,int dep)
        {
            //add in the result
            if(dep==keys.size())
            {
                vector<int> newv;
                for(int i=0;i<dep;i++)
                    for(int j=0;j<v[i];j++)
                        newv.push_back(keys[i]);
                result.push_back(newv);
                return;
            }
            //generate with next key
            for(int i=0;i<=count[dep];i++)
            {
                v[dep]=i;
                generate(result,keys,count,v,dep+1);
            }
        }
    };
  • 相关阅读:
    JS继承
    Liunx 常用命令2
    团队作业(四)
    OpenEuler树莓派基础实验(无树莓派)
    thread同步测试
    团队作业(三)
    实验二测试
    浅谈JWT。
    monolog使用 brady
    Blazor Server获取Token访问外部Web Api
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3759557.html
Copyright © 2011-2022 走看看