这个题由于可以一个数字使用多次 所以没有想清楚如何像上一个题一样 其实调用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 ++;
}
}
}