LeetCode java-17. 电话号码的字母组合
(题目来自力扣网)
思路
回溯法
参考代码
电话号码的字母组合
给出如下回溯函数 backtrack(combination, next_digits) ,它将一个目前已经产生的组合
combination 和接下来准备要输入的数字 next_digits 作为参数。
代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LetterCombinations {
List<String> res = new ArrayList<>();
public List<String> letterCombinations(String digits) {
if (digits == null || digits.length()==0){
return res;
}
if (digits.length()!=0){
dfs("",digits);
}
return res;
}
private void dfs(String combination, String next_digits) {
Map<String, String> phone = new HashMap<String, String>() {{
put("2", "abc");
put("3", "def");
put("4", "ghi");
put("5", "jkl");
put("6", "mno");
put("7", "pqrs");
put("8", "tuv");
put("9", "wxyz");
}};
if (next_digits.length() == 0){
res.add(combination);
}else{
String digit = next_digits.substring(0,1);//2
String letters = phone.get(digit);//abc
for (int i = 0; i < letters.length() ; i++) {
String letter = phone.get(digit).substring(i,i+1);
dfs(combination+letter,next_digits.substring(1));
}
}
}
public static void main(String[] args) {
String str = "23";
System.out.println(new LetterCombinations().letterCombinations(str));
}
}
//a ad ae af b bd be bf c cd ce cf