39. Combination Sum

題目描述:

Given a set of candidate numbers (C(without duplicates) 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.
  • The solution set must not contain duplicate combinations.
題目要求給出一個正整數數組,與一個目標整數,求出所有和爲目標數的所有組合。我們可以用深度優先的方法搜索。將結果保存在一個向量中。如果結果不符合,則回到上一節點。如果結果符合,則將結果存進另一向量中。代碼如下:

class Solution {
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        vector<vector<int>> results;
        sort(candidates.begin(), candidates.end());
        helper(results,vector<int>{},candidates,target,0);
        return results;
    }
    void helper(vector<vector<int>> &results, vector<int> result, vector<int>& c, int target, int index){
        if(target == 0){
            results.push_back(result);
            return;
        }
        for(int i = index; i < c.size() && target >= c[i]; ++i){
            result.push_back(c[i]);
            helper(results, result, c, target - c[i], i);
            result.pop_back();
        }//end of for
    }//end of helper
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章