题目
https://leetcode.cn/problems/letter-combinations-of-a-phone-number/
答案
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class T17 {
//力扣T17,电话号码的字母组合
public static List<String> res = new ArrayList<>();//答案集
public static Map<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 static void main(String[] args) {
//测试
T17 t17 = new T17();
List<String> strings = t17.letterCombinations("23");
System.out.println(strings);
}
public List<String> letterCombinations(String digits) {
//初始化答案集
res = new ArrayList<>();
//特殊情况直接返回
if (digits.isEmpty() || digits.isEmpty()){
return res;
}
dfs(new StringBuffer(),0,digits);
return res;
}
/**
*
* @param s 传递字符串
* @param l 当前索引
* @param digits 原题字符串
*/
public static void dfs(StringBuffer s,int l,String digits){
//出口检测,索引到底以后添加答案,然后终止递归
if (l==digits.length()){
res.add(s.toString());
return;
}
//获取当前数字对应的三个或者四个字符
String s1 = map.get(digits.charAt(l));
for (int i = 0; i < s1.length(); i++) {
//循环,将每一个都添加进去后交给下一层递归
dfs(s.append(s1.charAt(i)),l+1,digits);
//添加之后要删除,不然会影响答案
s.deleteCharAt(l);
}
}
}