zoukankan      html  css  js  c++  java
  • Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

    Each number in C may only be used once in the combination.

    Note:

    • All numbers (including target) will be positive integers.
    • Elements in a combination (a1a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
    • The solution set must not contain duplicate combinations.

    For example, given candidate set 10,1,2,7,6,1,5 and target 8
    A solution set is: 
    [1, 7] 
    [1, 2, 5] 
    [2, 6] 
    [1, 1, 6] 

    struct Node
    {
      int key;
      int cnt;
    };
    class Solution {
    private:
        vector<Node> v;
        vector<Node> data;
        vector<vector<int> > result;
        int len;
        
        void generate(int vdep,int index,int target)
        {
            if(target<0return;
            if(target==0)
            {
                vector<int> re;
                for(int i=0;i<vdep;i++)
                    for(int j=0;j<v[i].cnt;j++)
                        re.push_back(v[i].key);
                result.push_back(re);
                return;
            }
            for(int i=index;i<len;i++)
            {
                for(int j=1;j<=data[i].cnt;j++)
                {
                    v[vdep].key=data[i].key;
                    v[vdep].cnt=j;
                    generate(vdep+1,i+1,target-v[vdep].key*j);
                }
            }
        }
    public:
        vector<vector<int> > combinationSum2(vector<int> &num, int target) 
        {
            sort(num.begin(),num.end());
            //group
            int old=0;
            Node node;
            for(int i=0;i<num.size();i++)
            {
                if(num[i]==old) data[data.size()-1].cnt++;
                else
                {
                    node.key=num[i];
                    old=node.key;
                    node.cnt=1;
                    data.push_back(node);
                }
            }
            for(int i=0;i<num.size();i++)
                v.push_back(node);
                    
            result.clear();
            
            len=data.size();
            
            generate(0,0,target);
            return result;
        }
    }; 
  • 相关阅读:
    Eclispe造成的tomcat占用端口 无法启动 强制终止进程 转载
    JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
    spket IDE插件更新地址
    SQL 语句外键 a foreign key constraint fails
    面试技能树 转载
    简单粗暴 每个servlet之前都插入一段代码解决 乱码问题
    记录一个因sqlmap导致的错误
    Java与数据库数据类型对应表
    乐观锁与悲观锁
    maven打的包中含源文件jar包
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3759351.html
Copyright © 2011-2022 走看看