class Solution {
// 保存结果
List<String> res = new ArrayList<>();
// 数字与字符串映射
String[] map = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
// 暂存字符串
StringBuilder sb = new StringBuilder();
public List<String> letterCombinations(String digits) {
if(digits==null || digits.length() ==0){
return res;
}
backTraking(digits,0);
return res;
}
// index 表示digits的第index个字符,index从0算起
public void backTraking(String digits,int index){
// 当index到达digits的末尾,指向空时,收集结果
if(index == digits.length()){
res.add(sb.toString());
return;
}
// 根据当前的index 得到digits字符串的第index个字符对应的字符串,例如 "23" 对应的第一个字符串为abc
String temp = map[digits.charAt(index)-'0'];
// 遍历temp字符串的每一个字符
for(int i=0; i<temp.length(); i++){
sb.append(temp.charAt(i));
// 递归
backTraking(digits,index+1);
// 回溯
sb.deleteCharAt(sb.length()-1);
}
}
}
运行结果: