39. 组合总和 解题思路 改造回溯算法找到目标和之后 本次回溯结束 添加路径记录遍历数组 选择路径 回溯 撤销选择 class Solution {List<List<Integer>> res = new LinkedList<>();LinkedList<Integer> track = new LinkedList<>();// 记录路经综合int trackSum = 0;public List<List<Integer>> combinationSum(int[] candidates, int target) {// 每一个元素被反复使用 将i + 1 改成i即可// 相当于给之前的回溯树添加一条树枝 遍历这棵树的过程中 一个元素可以被无限次使用if(candidates.length == 0){return res;}backtrack(candidates,0,target);return res;}//回溯算法主函数void backtrack(int[] nums,int start,int target){if(trackSum == target){// 找到目标和 本次回溯结束res.add(new LinkedList<>(track));return;}//base caseif(trackSum > target){return;}// 回溯算法 标准框架for(int i = start; i < nums.length; i++){// 选择nums[i]trackSum += nums[i];track.add(nums[i]);backtrack(nums,i,target);// 撤销选择trackSum -= nums[i];track.removeLast();}} }