classSolution { // Save the final answer privatefinal List<List<Integer>> ans = newLinkedList<>(); // 0 ~ 9 privatefinalint[] nums = newint[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; // Whether the num has been used privatefinalboolean[] flag = newboolean[9];
public List<List<Integer>> combinationSum3(int k, int n) { dfs(n, k, newLinkedList<>()); // Sort in order to deduplicate ans.forEach(integers -> integers.sort(Integer::compareTo)); // Deduplicate and return the final answer return ans.stream().distinct().collect(Collectors.toList()); }
privatevoiddfs(int target, int k, List<Integer> tmp) { // Time to stop recursive call if (k == 0 && target == 0) { ans.add(newLinkedList<>(tmp)); return; }
for (inti=0; i < nums.length; i++) { // If the num has not been used if (!flag[i]) { flag[i] = true; List<Integer> newTmp = newLinkedList<>(tmp); newTmp.add(nums[i]); // Recursive call dfs(target - nums[i], k - 1, newTmp); flag[i] = false; } } } }
classSolution { // Save the final answer privatefinal List<List<Integer>> ans = newLinkedList<>(); // 0 ~ 9 privatefinalint[] nums = newint[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; // Whether the num has been used privatefinalboolean[] flag = newboolean[9];
public List<List<Integer>> combinationSum3(int k, int n) { dfs(n, k, newLinkedList<>(), 0); // Sort in order to deduplicate ans.forEach(integers -> integers.sort(Integer::compareTo)); // Deduplicate and return the final answer return ans.stream().distinct().collect(Collectors.toList()); }
/** * * @param target sum * @param k How many nums can be used * @param tmp From last recursive call * @param index Remember where to start in order to deduplicate */ privatevoiddfs(int target, int k, List<Integer> tmp, int index) { // Time to stop recursive call if (k == 0 && target == 0) { ans.add(newLinkedList<>(tmp)); return; }
// Start loop from index for (inti= index; i < nums.length; i++) { // If the num has not been used if (!flag[i]) { flag[i] = true; List<Integer> newTmp = newLinkedList<>(tmp); newTmp.add(nums[i]); // Recursive call dfs(target - nums[i], k - 1, newTmp, index + 1); flag[i] = false; } } } }