题目
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
思路
1.回溯,把每个数字代表的字母保存到静态变量中,然后遍历;
代码
class Solution {
public static final String[] keys = {
"","","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;
}
//回溯 结果用StringBuilder
backtracking(new StringBuilder(),res,digits);
return res;
}
public void backtracking(StringBuilder str,List<String> res,String digits){
//出口
if(str.length()==digits.length()){
res.add(str.toString());
return;
}
//计算当前index位下标--这里小细节注意处理
int curindex = digits.charAt(str.length())-'0';
String letter = keys[curindex];
for(char c : letter.toCharArray()){
str.append(c);
backtracking(str,res,digits);
str.deleteCharAt(str.length()-1);
}
}
}
class Solution {
public static final String[] keys = {
"","","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;
}
//回溯 结果用StringBuilder
backtracking(new StringBuilder(),res,digits,0);
return res;
}
public void backtracking(StringBuilder str,List<String> res,String digits,int index){
//出口--截止条件
if(index==digits.length()){
res.add(str.toString());
return;
}
//计算当前index位下标--这里小细节注意处理
int curindex = digits.charAt(index)-'0';
String letter = keys[curindex];
for(char c : letter.toCharArray()){
str.append(c);
backtracking(str,res,digits,index+1);
str.deleteCharAt(str.length()-1);
}
}
}