216. Combination Sum III
class Solution {
List<List<Integer>> res = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
List<Integer> path = new ArrayList<>();
backtracking(k, n, path, 1, 0);
return res;
}
public void backtracking(int k, int n, List<Integer> path, int cur, int sum) {
if (sum > n || path.size() > k) {
return;
}
if (path.size() == k && sum == n) {
res.add(new ArrayList<>(path));
return;
}
for (int i = cur; i <= 9; i++) {
sum += i;
path.add(i);
backtracking(k, n, path, i + 1, sum);
sum -= i;
path.remove(path.size() - 1);
}
}
}
17. Letter Combinations of a Phone Number
class Solution {
List<String> res = new ArrayList<>();
HashMap<Character, String> map = new HashMap<>(){{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}};
public List<String> letterCombinations(String digits) {
if (digits.length() == 0) {
return res;
}
StringBuilder path = new StringBuilder();
backtracking(digits, 0, path);
return res;
}
public void backtracking(String digits, int index, StringBuilder path) {
if (path.length() == digits.length()) {
res.add(path.toString());
return;
}
String values = map.get(digits.charAt(index));
for (int j = 0; j < values.length(); j++) {
path.append(values.charAt(j));
backtracking(digits, index + 1, path);
path.deleteCharAt(path.length() - 1);
}
}
}