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] ] //解题思路是用递归代码如下这里有两个注意点,一个是要保护现场就是List.remove操作,还有一个是在target== 0 的时候,将结果放入result时要用new ArrayList 的方式放入,因为result会覆盖之前的List值,所以不然放进去的是空值。class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { Arrays.sort(candidates); List<List<Integer>> result = new ArrayList(); backtrack(result,new ArrayList<Integer>(),candidates,target,0); return result; } public void backtrack(List<List<Integer>> result,List<Integer> list,int[] candidates,int target,int start){ if(target == 0){ result.add(new ArrayList(list)); } if(target > 0){ for(int i = start;i < candidates.length && target >= candidates[i];i++){ list.add(candidates[i]); backtrack(result,list,candidates,target- candidates[i],i); list.remove(list.size()-1); } } } }