From fc92c7a09156a62c37c46528569f0e634fa19e34 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Tue, 13 Aug 2024 14:45:31 +0200 Subject: [PATCH] =?UTF-8?q?java:=20add=20=C2=AB40.=20Combination=20Sum=20I?= =?UTF-8?q?I=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- java/combination-sum-ii.java | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 java/combination-sum-ii.java diff --git a/java/combination-sum-ii.java b/java/combination-sum-ii.java new file mode 100644 index 0000000..d3af6a3 --- /dev/null +++ b/java/combination-sum-ii.java @@ -0,0 +1,41 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +class Solution { + int[] candidates; + private HashSet> combinations; + + private void combinationSum2(ArrayList combination, int target, int i0) { + if (target == 0) { + combinations.add(combination.stream().toList()); + return; + } + + if (i0 >= candidates.length) { + return; + } + + for (int i = i0; i < candidates.length && candidates[i] <= target; ++i) { + if (i > i0 && candidates[i] == candidates[i - 1]) { + continue; + } + + combination.addLast(candidates[i]); + combinationSum2(combination, target - candidates[i], i + 1); + combination.removeLast(); + } + } + + public List> combinationSum2(int[] candidates, int target) { + this.candidates = candidates; + combinations = new HashSet<>(); + + Arrays.sort(this.candidates); + combinationSum2(new ArrayList<>(), target, 0); + var result = combinations.stream().toList(); + + return result; + } +}