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]
]
1 class Solution { 2 private List<List<Integer>> res = new ArrayList<>(); 3 public List<List<Integer>> combinationSum(int[] candidates, int target) { 4 List<Integer> temp = new ArrayList<Integer>(); 5 help(temp,candidates,0,0,target); 6 return res; 7 } 8 private void help(List<Integer> temp,int[] nums,int index,int cursum,int target){ 9 if(cursum>target) 10 return; 11 if(cursum==target) 12 res.add(new ArrayList<Integer>(temp)); 13 for(int i = index;i<nums.length;i++){ 14 temp.add(nums[i]); 15 help(temp,nums,i,cursum+nums[i],target); 16 temp.remove(temp.size()-1); 17 } 18 } 19 }
2019.3.12
1 class Solution { 2 public: 3 vector<vector<int>> finalres ; 4 vector<vector<int>> combinationSum(vector<int>& candidates, int target) { 5 if(candidates.size()==0) return finalres; 6 vector<int> curres; 7 help(0,curres,candidates,0,target); 8 return finalres; 9 10 } 11 void help(int cursum,vector<int>& curres,vector<int>& candidates,int index,int target){ 12 if(cursum==target) 13 finalres.push_back(curres); 14 if(cursum>target) 15 return; 16 for(int i = index;i<candidates.size();i++){ 17 curres.push_back(candidates[i]); 18 help(cursum,curres,candidates,i,target-candidates[i]); 19 curres.pop_back(); 20 21 } 22 } 23 };