leetcode之Combination Sum

来源:互联网 发布:网络直播游戏 编辑:程序博客网 时间:2024/05/22 02:14

题目:

Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • Elements in a combination (a1a2, … , ak) must be in non-descending order. (ie, a1 ≤ a2 ≤ … ≤ ak).
  • The solution set must not contain duplicate combinations.

For example, given candidate set 2,3,6,7 and target 7
A solution set is: 
[7] 
[2, 2, 3] 

解答:

直接进行递归回溯即可,可以用剩下的未满足的数量作为参数,可以减少存储,注意在递归的过程中进行剪枝

class Solution {public:    void search(int i,vector<int>& nums, int target, vector<int> temp)    {        if(0 == target)        {            res.push_back(temp);            //temp.pop_back();            return;        }        if(i == nums.size())            return;        if(nums[i] > target)            return;        while(target >= 0)        {            search(i + 1, nums,target, temp);            temp.push_back(nums[i]);            target -= nums[i];        }            }    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {        vector<int> temp;        sort(candidates.begin(),candidates.end());        search(0, candidates, target, temp);        return res;        }    private:    vector<vector<int>> res;};


0 0
原创粉丝点击