zoukankan      html  css  js  c++  java
  • LeetCode-39. Combination Sum

    一、问题描述

        

      简介概括,给定一个没有重复元素的数组,要求找出所有相加结果为target的组合(同一个元素可以多次使用,元素个数也不限)。

    二、问题解决

      使用递归,每次碰到合适的数就加入到结果之中。

    //从candidates数组的begin位置开始寻找,找到和target相等的组合,将这一次的结果thistime放在result中
    void find(vector<int>& candidates, int target, int begin, vector<vector<int>> &result,vector<int>& thistime) {
        if (target == 0) {
            result.push_back(thistime);
            return;
        }
        for (int i = begin; i < candidates.size() && candidates[i] <= target; ++i) {
            thistime.push_back(candidates[i]);
            find(candidates,target-candidates[i],i,result,thistime);
            thistime.pop_back();
        }
    }
    
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        sort(candidates.begin(),candidates.end());
        vector<vector<int>> result;
        vector<int> thistime;
        find(candidates,target,0,result,thistime);
        return result;
    }
    
    //这是测试用例
    int main()
    {
        vector<int> v = {2,3,6,7};
        vector<vector<int>> result = combinationSum(v,7);
        for (auto i : result) {
            for (auto j : i)
                cout << j ;
            cout << endl;
        }
    
        system("pause");
        return 0;
    }

    三、问题思考

      熟悉递归的使用即可。

  • 相关阅读:
    arguments.callee
    vue的生命周期
    Vue中的v-cloak用法
    控制input只能输入数字和两位小数
    css3新单位vw、vh的使用详解
    关于图片的Base64编码
    Logic and Fault simulation
    scan design flow(二)
    scan design flow(一)
    异构计算
  • 原文地址:https://www.cnblogs.com/likaiming/p/8377704.html
Copyright © 2011-2022 走看看