diff --git a/java/17-Letter-Combinations-of-a-Phone-Number.java b/java/17-Letter-Combinations-of-a-Phone-Number.java new file mode 100644 index 000000000..def598a17 --- /dev/null +++ b/java/17-Letter-Combinations-of-a-Phone-Number.java @@ -0,0 +1,37 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +class Solution { + private Map digitToChar = Map.of( + '2', "abc", '3', "def", '4', "ghi", '5', "jkl", + '6', "mno", '7', "pqrs", '8', "tuv", '9', "wxyz"); + + public List letterCombinations(String digits) { + + if (digits.length() == 0) { + return new ArrayList(); + } + + List ans = new ArrayList(); + String cur = ""; + backtrack(digits, ans, cur, 0); + return ans; + + } + + public void backtrack(String digits, List ans, String cur, int index) { + + if (cur.length() == digits.length()) { + ans.add(cur); + return; + } else if (index >= digits.length()) { + return; + } else { + String digit = digitToChar.get(digits.charAt(index)); + for (char c : digit.toCharArray()) { + backtrack(digits, ans, cur + c, index + 1); + } + } + } +} \ No newline at end of file diff --git a/java/39-Combination-Sum.java b/java/39-Combination-Sum.java new file mode 100644 index 000000000..e3b0f4730 --- /dev/null +++ b/java/39-Combination-Sum.java @@ -0,0 +1,24 @@ +class Solution { + public List> combinationSum(int[] candidates, int target) { + List> ans = new ArrayList>(); + List cur = new ArrayList(); + backtrack(candidates, target, ans, cur, 0); + return ans; + + } + + public void backtrack(int[] candidates, int target, List> ans, List cur, int index) { + if (target == 0) { + ans.add(new ArrayList(cur)); + } else if (target < 0 || index >= candidates.length) { + return; + } else { + cur.add(candidates[index]); + backtrack(candidates, target - candidates[index], ans, cur, index); + + cur.remove(cur.get(cur.size() - 1)); + backtrack(candidates, target, ans, cur, index + 1); + } + + } +} \ No newline at end of file