题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
代码
class Solution {
//这里最好用StringBuilder,String的话每次都需要创建,会增加时间开销
private StringBuilder sb=new StringBuilder();
public List<String> letterCombinations(String digits) {
String[]strs=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
ArrayList<String>list=new ArrayList<>();
if(digits.length()==0){return list;}
JiSuan(list,digits,0,strs);
return list;
}
public void JiSuan(ArrayList<String>list,String digits,int index,String[] strs){
if(sb.length()==digits.length()){
list.add(String.valueOf(sb));
return;
}
String digits_copy=strs[digits.charAt(index)-'0'];
for(int i=0;i<digits_copy.length();i++){
sb.append(digits_copy.charAt(i));
JiSuan(list,digits,index+1,strs);
sb.deleteCharAt(sb.length()-1);
}
}
}