zoukankan      html  css  js  c++  java
  • Combination Sum

    一遇到这种回溯递归的,感觉脑子就成了浆糊~~

    第一点:对于不合格的元素直接返回,不在结果向量里添加任何东西,有了返回便继续下面的循环

    第二点:对于某些元素可以重复无数次--采用办法下次递归的元素仍从接着上个元素。

    for(int j=index[n];j<candidates.size()&&(target>=candidates[j]);j++)
            {
                index[n+1]=j; 
    
    
    class Solution {
        private:
            vector<vector<int>> res;
            const int index_count=10000;
            
    public:
        void findSet(int sum,vector<int>& candidates,int target,int index[],int n )
        {
            if(sum>target)
            return;
            if(sum==target)
            {
                vector<int> result;
                for(int i=1;i<=n;i++)
                {
                    result.push_back(candidates[index[i]]);
                }
                res.push_back(result);
                return;
            }
            for(int j=index[n];j<candidates.size()&&(target>=candidates[j]);j++)
            {
                index[n+1]=j;
                findSet(sum+candidates[j],candidates,target,index,n+1);
            }
        }
        vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            sort(candidates.begin(),candidates.end());
            int *index=new int [index_count];
             memset(index,0,sizeof(int)*index_count);
            res.clear();
            findSet(0,candidates,target,index,0);delete[] index;
            return res;
        }
    };
  • 相关阅读:
    算法市场 Algorithmia
    Cucumber
    TeamCity 持续集成工具
    自动化测试
    Selenium
    Android耗时操作
    RecyclerView
    Android报错
    Lakeshore
    BaaS_后端即服务 RESTful
  • 原文地址:https://www.cnblogs.com/daocaorenblog/p/5277055.html
Copyright © 2011-2022 走看看