算法题17电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
这道题最核心的点就是在于根据不同的长度的数字字符串给出不同的循环次数,我使用的是递归回溯算法,直接上代码
List<String> re = new ArrayList<>();
if(digits.equals("")) return re;
String[] num = {"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
//System.out.println(digits.substring(0,1));
int n = Integer.parseInt(digits.substring(0,1));
if(digits.length()>1){
for (int i=0;i< num[n-2].length();i++){
for (String j : letterCombinations(digits.substring(1))){
re.add(num[n-2].substring(i,i+1)+j);
}
}
}else if(digits.length()==1){
for (int z=0;z< num[n-2].length();z++){
re.add(num[n-2].substring(z,z+1));
}
}
return re;
这算法效率不算很高,可能是用了字符串的原因,不过能通过就行。