概述
给定一个仅包含数字2-9
的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:
· 0 <= digits.length <= 4
· digits[i] 是范围 ['2', '9'] 的一个数字。
解题思路
看到返回所有组合即可想到使用回溯法来解决。
解题代码
class Solution {
String[] map;
public List<String> letterCombinations(String digits) {
ArrayList<String> res = new ArrayList<>();
if (digits.equals(""))return res;
map=new String[8];
map[0]="abc";
map[1]="def";
map[2]="ghi";
map[3]="jkl";
map[4]="mno";
map[5]="pqrs";
map[6]="tuv";
map[7]="wxyz";
dfs(0,digits.length(),digits,new StringBuilder(),res);
return res;
}
public void dfs(int index,int n,String digits,StringBuilder stringBuilder,ArrayList<String> res){
if (index==n){
res.add(stringBuilder.toString());
return;
}
String tmp=map[Integer.parseInt(digits.substring(index,index+1))-2];
for (int i=0;i<tmp.length();i++){
stringBuilder.append(tmp.charAt(i));
dfs(index+1,n,digits,stringBuilder,res);
stringBuilder.deleteCharAt(stringBuilder.length()-1);
}
}
}