一、题目
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合,答案可以按任意顺序返回。
给出数字和字母的映射,1不对应任何字母。

二、思路
1、通过回溯法,对每个数字依次尝试其对应的所有字母,构建所有可能的组合,直到完成整个字符串的映射。
三、代码
java
class Solution {
private String[] map ={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public List<String> letterCombinations(String digits) {
List<String> res = new ArrayList<>();
if(digits == null || digits.length()==0){
return res;
}
backtracing(digits,0,new StringBuilder(),res);
return res;
}
public void backtracing(String digits,int index,StringBuilder path,List<String> res){
//终止条件:当前处理到第index个字符,如果 index == digits.length()表示已经处理完所有的数字,路径完整
if(index == digits.length()){
res.add(path.toString());
return;
}
//获取当前数字对应的字母列表
char digit = digits.charAt(index);//当前数字字符
String letters = map[digit - '0'];//转为索引
//尝试当前数字的每一个字母
for(char c : letters.toCharArray()){
path.append(c);
backtracing(digits,index+1,path,res);
path.deleteCharAt(path.length() - 1);
}
}
}