给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
最开始想用map做,但是感觉实现起来很复杂,索性直接暴力做。
class Solution {
char[][] a = {
{},
{},
{'a','b','c'},
{'d','e','f'},
{'g','h','i'},
{'j','k','l'},
{'m','n','o'},
{'p','q','r','s'},
{'t','u','v'},
{'w','x','y','z'}
}; //定义这个二维字符数组方便暴力
List<String> l = new ArrayList<>();
int length;
String k = "";
public void ddgg(int m,String p){
for(int i = 0;i < a[k.charAt(m)-'0'].length;i++){
String u = "";
u = p + a[k.charAt(m)-'0'][i];
if(m == length){ //满足条件,添加到List
l.add(u);
}
else{
ddgg(m + 1,u); //不满足,继续递归
}
}
}
public List<String> letterCombinations(String digits) {
length = digits.length()-1;
if(digits == null || digits.equals("")){ //判断为空leetcode字符串的题基本上都有空串
return l;
}
k = digits;
ddgg(0,"");
return l;
}
}
每天进步一点点。