• [LeetCode] 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 (a1, a2, … , 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] 

    Hide Tags
     Array Backtracking
     
     
       一道回溯题目,可以剪枝提升速度。
     
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    class Solution {
    public:
        vector<vector<int > > ret;
        vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
            vector<int > stk;
            ret.clear();
            vector<int > tmp(candidates.begin(),candidates.end());
            sort(tmp.begin(),tmp.end());
            helpFun(tmp,target,0,stk);
            return ret;
        }
    
        void helpFun(vector<int> & cand,int tar, int idx,vector<int > & stk)
        {
            if(tar<0)   return ;
            if(tar==0){
                ret.push_back(stk);
                return ;
            }
            if(idx==cand.size())    return;
            stk.push_back(cand[idx]);
            helpFun(cand,tar-cand[idx],idx,stk);
            stk.pop_back();
            helpFun(cand,tar,idx+1,stk);
        }
    };
    
    int main()
    {
        vector<int > cand = {8,7,4,3};
        Solution sol;
        vector<vector<int > > ret=sol.combinationSum(cand,11);
        for(int i =0;i<ret.size();i++){
            for(int j=0;j<ret[i].size();j++)
                cout<<ret[i][j]<<" ";
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    函数模板的局限性级解决方法(第三代具体化)
    模板实现机制
    函数模板与普通函数的区别以及调用规则
    函数模板基本用法及泛型
    向上类型转换和向下类型转换
    虚析构和纯虚析构
    纯虚函数和抽象类
    多态原理
    静态联编和动态联编即多态的概念
    虚基类的内部工作原理
  • 原文地址:https://www.cnblogs.com/Azhu/p/4391404.html
Copyright © 2020-2023  润新知