1、题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
提示:
- 0 <= digits.length <= 4
- digits[i] 是范围 ['2', '9'] 的一个数字。
2、完整代码
class Solution {
static char[] ques; //每个数字对应的字符数组
static int sum ; //动态变化的当前字符串的长度
static Map<Character,String> map ; //将数字-字母以键值对的方式储存起来
static List<String> list; //需要返回的List集合
public List<String> letterCombinations(String digits) {
ques= digits.toCharArray(); //将输入的数字拆分字符,储存在字符数组中
sum = 0; //当前拼接的字符串长度为0
map = new HashMap();
list= new ArrayList<>();
map.put('2',"abc"); //电话号码对应的字母
map.put('3',"def");
map.put('4',"ghi");
map.put('5',"jkl");
map.put('6',"mno");
map.put('7',"pqrs");
map.put('8',"tuv");
map.put('9',"wxyz");
Answer(sum,ques.length,""); //参数为当前长度,最后的长度,以及一个空字符串
return list;
}
private static void Answer(int sum, int length,String a) {
if(length==0){ //输入为空,则返回空
return;
}
char[] chars = map.get(ques[sum]).toCharArray(); //拿到第一个数字('2')对应的字符串,转为字符数组('a','b','c')
sum = sum+1;//先将sum+1,如果+1后的sum刚刚好为length,即表明只需要加上最后一个字符,字符串就完成
if(sum==length){ //遍历当前数字对应的字符数组
for(int i=0;i<chars.length;i++){ //进行字符串最后一轮字符串拼接之后,加入集合中
String ans = a + chars[i];
list.add(ans);
}
return; //回退到上一级
}
if(sum<length){ //若这不是最后一次拼接
for(int i = 0;i<chars.length;i++){ //遍历当前数字对应的字符数组
String ans = a + chars[i]; //进行字符串拼接之后进入下一轮
Answer(sum, length,ans);
}
}
}
}