• 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);
            }
        }
    };
  • 相关阅读:
    vue关闭eslint
    ThinkPHP 5 项目执行慢问题排查
    Git 操作教程
    转】解决存储过程执行快,但C#程序调用执行慢的问题
    Centos8.0 安装Mongodb 命令步骤
    $TeX$ Gyre 字体安装过程与问题解决
    tomcat部署项目
    登录嵌套
    Django基础之
    win 常用命令
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3759557.html
Copyright © 2020-2023  润新知