39. 组合总和
描述
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。
链接
39. 组合总和 - 力扣(LeetCode) (leetcode-cn.com)
解法
1 class Solution { 2 List<List<Integer>> res = new ArrayList<>(); 3 Deque<Integer> path = new ArrayDeque<>(); 4 public List<List<Integer>> combinationSum(int[] candidates, int target) { 5 if (candidates == null || candidates.length == 0) return res; 6 Arrays.sort(candidates); 7 BackTracking(candidates, target, 0, 0); 8 return res; 9 } 10 11 public void BackTracking(int[] candidates, int target, int Sum, int Index) { 12 if (Sum > target) return; 13 if (Sum == target) { 14 res.add(new ArrayList<>(path)); 15 return; 16 } 17 18 for (int i = Index; i < candidates.length; i++) { 19 Sum += candidates[i]; 20 path.add(candidates[i]); 21 BackTracking(candidates, target, Sum, i); 22 Sum -= candidates[i]; 23 path.removeLast(); 24 } 25 } 26 }
参考
carl