zoukankan      html  css  js  c++  java
  • Combination Sum

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

    The same repeated number may be chosen from C unlimited number of times.

    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 2,3,6,7 and target 7
    A solution set is: 
    [7] 
    [2, 2, 3] 

    class Solution {
    public:
        vector<vector<int> > combinationSum(vector<int> &candidates, int target) 
        {
            //sort candidates
            int size=candidates.size();
            for(int i=0;i<size;i++)
                for(int j=i+1;j<size;j++)
                    if(candidates[i]>candidates[j])
                    {
                        int tmp=candidates[i];
                        candidates[i]=candidates[j];
                        candidates[j]=tmp;
                    }
            //dfs
            vector<vector<int>> result;
            if(size==0return result;
            
            int v[target/candidates[0]];
            int cdep=0;
            int vdep=0;
            dfs(result,candidates,size,v,cdep,vdep,target);
            return result;
        }
        
        void dfs(vector<vector<int>>& result,vector<int> &candidates,int& csize,int* v,int& cdep,int& vdep,int& target)
        {
            if(target==0)
            {
                vector<int> vals;
                for(int i=0;i<vdep;i++)
                    vals.push_back(v[i]);
                result.push_back(vals);
                return;
            }
            if(cdep==csize || target<candidates[cdep]) return;
            
            int dup=target/candidates[cdep];
            for(int i=0;i<=dup;i++)
            {
                //add to v
                for(int j=0;j<i;j++) v[vdep+j]=candidates[cdep];
                //search next candidate
                target=target-i*candidates[cdep];
                cdep=cdep+1;
                vdep=vdep+i;
                dfs(result,candidates,csize,v,cdep,vdep,target);
                vdep=vdep-i;
                cdep=cdep-1;
                target=target+i*candidates[cdep];
            }
        }
    }; 
  • 相关阅读:
    JavaScript----特效代码
    坑!vue.js在ios9中失效
    MySQL的ibdata1文件占用过大
    Ubuntu搭建Gitlab服务器
    Logstash+Kibana部署配置
    Kafka+Zookeeper集群搭建
    ES5.0集群搭建
    Kibana使用高德地图
    Zabbix安装客户端agent(windows和Centos7)
    Centos/Rhel7部署Zabbix监控(部署篇之服务器篇)
  • 原文地址:https://www.cnblogs.com/erictanghu/p/3759348.html
Copyright © 2011-2022 走看看