zoukankan      html  css  js  c++  java
  • 34组合总和(39)

    作者: Turbo时间限制: 1S章节: 递归

    晚于: 2020-07-29 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-05 12:00:00

    问题描述 :

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合,输出组合的数量。

    candidates 中的数字可以无限制重复被选取。

    说明:

    所有数字(包括 target)都是正整数。

    解集不能包含重复的组合。 

    示例 1:

    输入:candidates = [2,3,6,7], target = 7,

    所求解集为:

    [

      [7],

      [2,2,3]

    ]

    输出:2

    示例 2:

    输入:candidates = [2,3,5], target = 8,

    所求解集为:

    [

      [2,2,2,2],

      [2,3,3],

      [3,5]

    ]

    输出:3

    可使用以下main函数:

    int main()

    {

        int n,data,target;

        vector<int> candidates;

        cin>>n;

        for(int i=0; i<n; i++)

        {

            cin>>data;

            candidates.push_back(data);

        }

        cin>>target;

        vector<vector<int> > res=Solution().combinationSum(candidates,target);

        cout<<res.size()<<endl;

        return 0;

    }

    输入说明 :

    首先输入candidates数组的长度n,

    然后输入n个整数,以空格分隔。

    最后输入target 。

    1 <= n <= 30

    1 <= candidates[i] <= 100      candidates 中的每个元素都是独一无二的。

    1 <= target <= 100

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream> 
    #include <vector>
    using namespace std;
    
    
    class Solution {
    public:
         vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
            vector<vector<int> > res;
            vector<int> temp; 
            combinationSumCore(res, candidates, target, temp, 0, 0);
            return res;
        }
        void combinationSumCore(vector<vector<int>> &res, vector<int>& candidates, int target, vector<int>& temp, int sum, int begin)
        {
            if(sum == target)
            {
                res.push_back(temp);
            }
            else
            {
                for(int i=begin; i<candidates.size(); i++)
                {
                    if(sum+candidates[i]<=target){
                        temp.push_back(candidates[i]);
                        combinationSumCore(res, candidates, target, temp, sum+candidates[i], i);
                        temp.pop_back();
                    }
                }
            }
        }
    
    };
    int main()
    {
        int n,data,target;
        vector<int> candidates;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cin>>data;
            candidates.push_back(data);
        }
        cin>>target;
        vector<vector<int> > res=Solution().combinationSum(candidates,target);
        cout<<res.size();
        return 0;
    }
  • 相关阅读:
    11 2
    10 29
    10 22
    dp的本质
    笛卡尔树小结
    Gitlab 备份迁移恢复报错gtar: .: Cannot mkdir: No such file or directory
    升级Jenkins版本
    当linux中的所有指令突然不能使用的时候
    合并范围
    每股收益列报计算
  • 原文地址:https://www.cnblogs.com/zmmm/p/13624193.html
Copyright © 2011-2022 走看看