Day25 回溯算法 part02
我的思路:
在上一个组合问题代码的基础上,添加判断总和
解答:
class Solution {
public List<List<Integer>> res = new ArrayList();
public List<Integer> path = new ArrayList();
public List<List<Integer>> combinationSum3(int k, int n) {
backtracing(k, n, 1);
return res;
}
public void backtracing(int k, int n, int startIndex) {
if(path.size() == k && getSum(path, n)) {
res.add(new ArrayList(path));
return;
}
for(int i = startIndex; i <= 9; i++) {
path.add(i);
backtracing(k, n, i + 1);
path.removeLast();
}
}
public boolean getSum(List<Integer> path, int n) {
int sum = 0;
for(int index : path) {
sum += index;
}
return sum == n;
}
}
我的思路:
创建一个hashmap,当digits对应的数字没有取完,就继续回溯
解答:
class Solution {
public StringBuffer path = new StringBuffer();
public List res = new ArrayList();
public Map<Character, String> hashmap = 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 == null || digits.length() == 0) {
return new ArrayList();
}
backtracing(digits, 0);
return res;
}
public void backtracing(String digits, int index) {
if(index == digits.length()) {
res.add(path.toString());
return;
}
char c = digits.charAt(index);
String value = hashmap.get(c);
for(char v: value.toCharArray()) {
path.append(v);
backtracing(digits, index + 1);
path.deleteCharAt(path.length() - 1);
}
}
}