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);
            }
        }
    };
  • 相关阅读:
    linux之shell综合例子之定时任务
    linux之shell流程控制
    C#之抛异常
    C# 日期帮助类
    Aspose Excel 单元格合并后边框显示不全
    Microsoft Compatibility telemetry占cpu资源高
    js 获取年、月、周、当前日期第几周、这月有那几周
    JS 延迟加载
    EasyUI DataGrid 多级表头设置
    C#关于日期 月 天数 和一年有多少周及根据某年某周获取时间段的计算
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3759557.html
Copyright © 2011-2022 走看看