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;
}
原文地址:https://www.cnblogs.com/zmmm/p/13624193.html