216. 组合总和 III
class Solution {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
res.clear();
list.clear();
backtracking(k, n, 9);
return res;
}
private void backtracking(int k, int n, int maxNum){
if(k == 0 && n == 0){
res.add(new ArrayList<>(list));
return;
}
if(maxNum == 0 || n > k * maxNum - k * (k - 1) / 2 || n < (1 + k) * k / 2){
return;
}
list.add(maxNum);
backtracking(k - 1, n - maxNum, maxNum - 1);
list.remove(list.size() - 1);
backtracking(k, n, maxNum - 1);
}
}
17. 电话号码的字母组合
class Solution {
List<String> list = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if(digits == null || digits.length() == 0){
return list;
}
String[] numString = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//迭代处理
backTracking(digits, numString, 0);
return list;
}
StringBuilder temp = new StringBuilder();
public void backTracking(String digits, String[] numString, int num){
if(num == digits.length()){
list.add(temp.toString());
return;
}
String str = numString[digits.charAt(num) - '0'];
for(int i = 0;i < str.length();i ++){
temp.append(str.charAt(i));
backTracking(digits,numString,num + 1);
temp.deleteCharAt(temp.length() - 1);
}
}
}