
java
class Solution {
List<String> res = new ArrayList<>();
StringBuilder path = new StringBuilder();
//手机按键映射表,0,1没有字母用空字符串占位
String[] letterMap = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
public List<String> letterCombinations(String digits) {
if(digits == null || digits.length() == 0){
return res;
}
backtrack(digits,0);
return res;
}
//index代表当前正在处理的digits的第几个数字
private void backtrack(String digits,int index){
if(index == digits.length()){
res.add(path.toString());
return;
}
//取出数字字符
char digitChar = digits.charAt(index);
//将数字字符转换成数字
int digit = digitChar - '0';
//查找该数字对应的字母组合
String letters = letterMap[digit];
for(int i = 0; i < letters.length(); i++){
path.append(letters.charAt(i));
backtrack(digits, index + 1);
path.deleteCharAt(path.length() - 1);
}
}
}
deleteCharAt(int index):删除位于指定下标处的那个字符
解题思路:
首先新建两个变量res和path,res用于盛放最终的结果集,path用于盛放单个的结果
然后定义一个字符数组,用于映射手机按键
定义一个回溯函数,当index与要求的digits的长度相等则将path放入到res中
取出digits的数字字符然后转成数字,并查找对应的字符组合
循环遍历,将字符添加到path中然后递归处理
最后将字符串长度-1