- 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
代码:
class Solution {
private Map<Character, String[]> map = new HashMap<>();
public Solution(){
map.put('2', new String[]{"a", "b", "c"});
map.put('3', new String[]{"d", "e", "f"});
map.put('4', new String[]{"g", "h", "i"});
map.put('5', new String[]{"j", "k", "l"});
map.put('6', new String[]{"m", "n", "o"});
map.put('7', new String[]{"p", "q", "r", "s"});
map.put('8', new String[]{"t", "u", "v"});
map.put('9', new String[]{"w", "x", "y", "z"});
}
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList();
for (int i = 0; i < digits.length(); i++) {
result = addList(map.get(digits.charAt(i)), result);
}
return result;
}
private List<String> addList(String[] str, List<String> list){
List<String> result = new ArrayList<>();
//第一次添加
if (list.size() == 0){
for (int i = 0; i < str.length; i++) {
result.add(str[i]);
}
}else{
//上一次的结果继续枚举添加
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < str.length; j++) {
result.add(list.get(i) + str[j]);
}
}
}
return result;
}
}