给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""
输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。
class Solution {
StringBuilder builder= new StringBuilder("");
List<String> ans= new ArrayList<>();
public List<String> letterCombinations(String digits) {
HashMap<Integer,ArrayList<Character>> Map=new HashMap<>();
Map.put(2,new ArrayList<>(){{
add('a');
add('b');
add('c');
}});
Map.put(3,new ArrayList<>(){{
add('d');
add('e');
add('f');
}});
Map.put(4,new ArrayList<>(){{
add('g');
add('h');
add('i');
}});
Map.put(5,new ArrayList<>(){{
add('j');
add('k');
add('l');
}});
Map.put(6,new ArrayList<>(){{
add('m');
add('n');
add('o');
}});
Map.put(7,new ArrayList<>(){{
add('p');
add('q');
add('r');
add('s');
}});
Map.put(8,new ArrayList<>(){{
add('t');
add('u');
add('v');
}});
Map.put(9,new ArrayList<>(){{
add('w');
add('x');
add('y');
add('z');
}});
char[] inputArray=digits.toCharArray();
if(inputArray.length==0) return ans;
compute(0,inputArray,Map);
return ans;
}
public void compute(int depth,char[] data,HashMap<Integer,ArrayList<Character>> map)
{
if(depth>=data.length) {
ans.add(builder.toString());
return;
}
if(data.length==0)
{
return ;
}
ArrayList<Character> sets=map.get(data[depth]-'0');
for(char e:sets)
{
builder.append(e);
compute(depth+1,data,map);
builder.delete(depth,depth+1);
}
}
}