《LeetCode力扣练习》代码随想录——回溯算法(组合总和II—Java)
刷题思路来源于 代码随想录
40. 组合总和 II
-
回溯
class Solution { private List<Integer> path = new ArrayList<>(); private List<List<Integer>> result = new ArrayList<>(); private boolean[] used; public List<List<Integer>> combinationSum2(int[] candidates, int target) { used = new boolean[candidates.length]; Arrays.sort(candidates); backtrack(candidates, target, 0, 0); return result; } private void backtrack(int[] candidates, int target, int sum, int startIndex) { if (sum > target) { return; } if (sum == target) { result.add(new ArrayList<>(path)); return; } for (int i = startIndex; i < candidates.length && sum + candidates[i] <= target; i++) { if (i > 0 && candidates[i] == candidates[i - 1] && used[i - 1] == false) { continue; } sum += candidates[i]; used[i] = true; path.add(candidates[i]); backtrack(candidates, target, sum, i + 1); sum -= candidates[i]; used[i] = false; path.remove(path.size() - 1); } return; } }