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;
    }

    三、问题思考

      熟悉递归的使用即可。

  • 相关阅读:
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    Python for Data Science
    软件工程实践总结
  • 原文地址:https://www.cnblogs.com/likaiming/p/8377704.html
Copyright © 2011-2022 走看看