这个题由于可以一个数字使用多次 所以没有想清楚如何像上一个题一样 其实调用recursive的时候 还是传相同的数组就好 然后本层可以add 扔掉 在add一个不一样的
注意一定要先sort!
public class Solution { public List<List<Integer>> combinationSum(int[] candidates, int target) { List<List<Integer>> res = new ArrayList<List<Integer>> (); List<Integer> list = new ArrayList<Integer> (); Arrays.sort(candidates); helper( res, list, candidates, 0, target ); return res; } public void helper ( List<List<Integer>> res, List<Integer> list, int [] candidates, int next, int target ){ if ( target == 0 ){ res.add( new ArrayList<Integer>( list ) ); return; } while ( next < candidates.length && target >= candidates[next] ){ list.add( candidates[next] ); helper ( res, list, candidates, next, target - candidates[next] ); list.remove( list.size() - 1); next ++; } } }