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);
            }
        }
    };
    
  • 相关阅读:
    KNN分类算法补充
    KNN分类算法实现手写数字识别
    KNN分类算法及python代码实现
    数据挖掘与机器学习介绍
    安装Numpy方法
    windows下的python环境搭建(python2和python3不兼容,python2用的多)
    用户画像知识
    Mahout介绍和简单应用
    协同过滤的实现步骤
    推荐系统基础知识
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/3079052.html
Copyright © 2011-2022 走看看