zoukankan      html  css  js  c++  java
  • leetcode子集和问题

    Combination Sum

    回溯法应用

    数组不含重复元素,结果可含重复元素。回溯法。

    自己写的代码:

    class Solution {
    public:
    vector<vector<int>>v;
    vector<int>v1;
    int sum;
        vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
            sort(candidates.begin(),candidates.end());
            v.clear();
            sum=0;
            backtrace(candidates,target,0);
            sort(v.begin(),v.end());
            return v;        
        }
        void backtrace(vector<int> &candidates, int target,int dep)
        {
            if(sum==target)
            {
                if(count(v.begin(),v.end(),v1)==0)v.push_back(v1);
            }
            if(dep==candidates.size())
            return;    
            if(dep<candidates.size())
            {
                int j=(target-sum)/candidates[dep];
                for(int i=0;i<j;i++)/可加入j次
                {      
                    sum+=candidates[dep];
                    v1.push_back(candidates[dep]);  
                    backtrace(candidates,target,dep+1); 
                }
                for(int i=0;i<j;i++)
                {
                    sum-=candidates[dep];
                    v1.pop_back();          
                }
                backtrace(candidates,target,dep+1);//不包含此元素时 
            }
        }
    };
    

     给出的集合里有重复元素,但每一个元素只能用一次

    class Solution {
    public:
    vector<vector<int>>v;
    vector<int>v1;
    int sum;
        vector<vector<int> > combinationSum2(vector<int> &candidates, int target) {
            sort(candidates.begin(),candidates.end());
            v.clear();
            sum=0;
            backtrace(candidates,target,0);
            sort(v.begin(),v.end());
            return v;        
        }
        void backtrace(vector<int> &candidates, int target,int dep)
        {  
            if(sum==target)
            {
                if(count(v.begin(),v.end(),v1)==0)v.push_back(v1);
            }
            if(dep==candidates.size())
            return;    
            if(dep<candidates.size()&&sum<target)
            {
                    sum+=candidates[dep];
                    v1.push_back(candidates[dep]);  
                    backtrace(candidates,target,dep+1); 
                    sum-=candidates[dep];
                    v1.pop_back();          
                    backtrace(candidates,target,dep+1);
            }
        }
    };
    
  • 相关阅读:
    【Git】分支管理
    【Java】jprofiler工具初上手
    【中间件】JMS
    【Idea】编译问题Intellij Error: Internal caches are corrupted or have outdated format
    【测试】测试用例选择
    【DevOps】
    【Unix】z/OS系统
    【数据库】表空间释放
    【数据库pojo类】Oracle数据库中各数据类型在Hibernate框架中的映射
    基于闭包实现的显示与隐藏
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/3079052.html
Copyright © 2011-2022 走看看