回溯框架base case:总和等于时添加res;大于时return使用 start 递归调用时把 i 自身传入即可实现重复取,又可以避免结果中相同的结果不同顺序出现的可能 class Solution { List<List<Integer>> res = new LinkedList<>(); LinkedList<Integer> track = new LinkedList<>(); int sum = 0; public List<List<Integer>> combinationSum(int[] candidates, int target) { if(candidates.length == 0){ return res; } backtrack(candidates,target,0); return res; } public void backtrack(int[] candidates,int target,int start){ if(target == sum){ res.add(new LinkedList(track)); return; } if(sum >target){ return; } for(int i = start;i<candidates.length;i++){ track.add(candidates[i]); sum += candidates[i]; backtrack(candidates,target,i); sum -= candidates[i]; track.removeLast(); } } }