题目: 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. For example, given candidate set [2, 3, 6, 7] and target 7, A solution set is: [ [7], [2, 2, 3] ]
解题过程: 这道题最好用递归的方法,先将候选数组元素排好序,遍历每个元素做递归,遍历到当前元素有两种选择,第一种,选取这个数,然后继续在这个位置进行递归。第二种,不选取这个数,在这个数后面的位置进行递归。
代码:
vector<vector<int> > combinationSum(vector<int> &candidates, int target) { vector<vector<int> > result; vector<int> combination; if(!candidates.empty()) { sort(candidates.begin(), candidates.end()); combinationSumAssist(candidates, 0, target, result, combination); } return result; } void combinationSumAssist(vector<int> &candidates, int index, int target, vector<vector<int> > &result, vector<int> &combination) { if(index >= candidates.size()) { return; } int temp = target - candidates[index]; if(temp >= 0) { combination.push_back(candidates[index]); if(temp == 0) { result.push_back(combination); } else { combinationSumAssist(candidates, index, temp, result, combination); } combination.pop_back(); } combinationSumAssist(candidates, index + 1, target, result, combination); }