LeetCode-39-Combination Sum

算法描述:

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

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

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

Example 1:

Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
  [7],
  [2,2,3]
]

Example 2:

Input: candidates = [2,3,5], target = 8,
A solution set is:
[
  [2,2,2,2],
  [2,3,3],
  [3,5]
]

解题思路:一看到获取所有的可能性这种题目,首先想到的就是回溯法。需要注意的是起始索引很重要,要不然会无限重新循环。

    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        vector<vector<int>> results;
        sort(candidates.begin(), candidates.end());
        vector<int> temp;
        combine(candidates,temp, target, results,0);
        return results;
    }
    
    void combine(vector<int>& candidates, vector<int>& temp, int target, vector<vector<int>>& results, int begin){
        if(target  == 0){
            results.push_back(temp);
            return;
        }
        
        for(int i=begin; i < candidates.size() && candidates[i] <= target; i++){
            temp.push_back(candidates[i]);
            combine(candidates,temp,target - candidates[i], results, i);
            temp.pop_back();
        }
        
    }

 

posted on 2019-01-29 14:00  无名路人甲  阅读(109)  评论(0)    收藏  举报