List<Integer> temp = new ArrayList<>(); for (int i = 0; i < oneSolve.size(); i++) { temp.add(oneSolve.get(i)); } ret.add(temp);
但是
上面的代码还有一个问题,最后ret 会含有重复的列表,再做一些改进,记录每次递归时当前的 i 值,下一个加入列表的值从数组的 i 位置开始找:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
publicvoidhelp(int[] candidates, int target, List<Integer> oneSolve, int sum, int i){ if (sum == target){ ret.add(new ArrayList<>(oneSolve)); return; }
for (; i < candidates.length;) { if (sum + candidates[i] <= target){ oneSolve.add(candidates[i]); help(candidates, target, oneSolve, sum+candidates[i], i); i++; oneSolve.remove(oneSolve.size()-1); }else break; } }