216.组合总和III
题目链接:216. 组合总和 III - 力扣(LeetCode)
class Solution {
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
backtrack(k, n, 0, new ArrayList<>(), 1);
return ans;
}
private void backtrack(int k, int n, int sum, List<Integer> list, int index) {
if(sum > n) {
return;
}
if(list.size() == k) {
if(sum == n) {
ans.add(new ArrayList<>(list));
}
return;
}
for(int i = index; i <= 9 - k + 1 + list.size(); ++i) {
list.add(i);
sum += i;
backtrack(k, n, sum, list, i + 1);
sum -= list.getLast();
list.remove(list.size() - 1);
}
}
}
17.电话号码的字母组合
题目链接:17. 电话号码的字母组合 - 力扣(LeetCode)
class Solution {
List<String> ans = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if(digits.length() == 0) {
return ans;
}
backtrack(0, digits, new StringBuffer());
return ans;
}
private void backtrack(int index, String digits, StringBuffer sb) {
if(sb.length() == digits.length()) {
ans.add(sb.toString());
return;
}
char ch = digits.charAt(index);
int i = 3;
if(ch == '7' || ch == '9') {
++i;
}
ch = getChar(ch);
for(int j = 0; j < i; ++j) {
sb.append((char)(ch + j));
backtrack(index + 1, digits, sb);
sb.deleteCharAt(sb.length() - 1);
}
}
private char getChar(char ch) {
switch (ch) {
case '2':
return 'a';
case '3':
return 'd';
case '4':
return 'g';
case '5':
return 'j';
case '6':
return 'm';
case '7':
return 'p';
case '8':
return 't';
case '9':
return 'w';
default:
return '@';
}
}
}