给定一个仅包含数字 2-9
的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
感谢评论里有个同学给我了灵感!
class Solution {
public List<String> letterCombinations(String digits) {
int len=digits.length();
String[] str=new String[len];
int i;
List<String>list=new ArrayList<>();
if(len==0)
return list;
for(i=0;i<len;i++){
switch(digits.charAt(i)){
case '2':
str[i]="abc";break;
case '3':
str[i]="def";break;
case '4':
str[i]="ghi";break;
case '5':
str[i]="jkl";break;
case '6':
str[i]="mno";break;
case '7':
str[i]="pqrs";break;
case '8':
str[i]="tuv";break;
case '9':
str[i]="wxyz";break;
}
}
list=getString(str,0,list,"");
return list;
}
private static List<String> getString(String[] s,int i,List<String> list,String str){
if(i<s.length){
for(int j=0;j<s[i].length();j++){
list=getString(s,i+1,list,str+s[i].charAt(j));
}
}
else{
list.add(str);
}
return list;
}
}
因为不知道给的字符串中数字有多少位,所以用递归来做,直到等于数字个数。
记得输入有可能是空字符串