diff --git a/combination-sum/ymir0804.java b/combination-sum/ymir0804.java new file mode 100644 index 0000000000..e22f480a1a --- /dev/null +++ b/combination-sum/ymir0804.java @@ -0,0 +1,31 @@ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +class Solution { + public List> combinationSum(int[] candidates, int target) { + List> result = new ArrayList<>(); + Arrays.sort(candidates); + backtrack(candidates, target, new ArrayList<>(), result, 0); + return result; + } + + + public void backtrack(int[] candidates, int remain, List current, List> result, int start) { + if (remain < 0) { + return; + } + if (remain == 0) { + result.add(new ArrayList<>(current)); + return; + } + + for (int i = start; i < candidates.length; i++) { + + if (candidates[i] > remain) break; + current.add(candidates[i]); + backtrack(candidates, remain - candidates[i], current, result, i); + current.remove(current.size() - 1); + } + } +}