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

    三、问题思考

      熟悉递归的使用即可。

  • 相关阅读:
    Create procedure
    json
    XSLT
    使用 ActiveMQ 示例
    使用Apache FtpServer搭建FTP服务器
    Publisher/Subscriber(发布/订阅者)消息模式开发流程
    使用 ActiveMQ 示例
    内嵌jetty
    基于Atom协议的数据接入规范
    C++创建jni 并且利用rundll32.exe调试jni程序
  • 原文地址:https://www.cnblogs.com/likaiming/p/8377704.html
Copyright © 2011-2022 走看看