leetCode:电话号码的字母组合
题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
示例 2:
输入:digits = “”
输出:[]
示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]
提示:
0 <= digits.length <= 4
digits[i] 是范围 [‘2’, ‘9’] 的一个数字。
思路:
使用map存储数据,然后循环合并即可。
代码:
class Solution {
public List<String> letterCombinations(String digits) {
if(digits.length()==0){
return new ArrayList<>();
}
Map<Character,List<String>> map = new HashMap<>();
List<String> list2 = new ArrayList<>();list2.add("a");list2.add("b");list2.add("c");map.put('2',list2);
List<String> list3 = new ArrayList<>();list3.add("d");list3.add("e");list3.add("f");map.put('3',list3);
List<String> list4 = new ArrayList<>();list4.add("g");list4.add("h");list4.add("i");map.put('4',list4);
List<String> list5 = new ArrayList<>();list5.add("j");list5.add("k");list5.add("l");map.put('5',list5);
List<String> list6 = new ArrayList<>();list6.add("m");list6.add("n");list6.add("o");map.put('6',list6);
List<String> list7 = new ArrayList<>();list7.add("p");list7.add("q");list7.add("r");list7.add("s");map.put('7',list7);
List<String> list8 = new ArrayList<>();list8.add("t");list8.add("u");list8.add("v");map.put('8',list8);
List<String> list9 = new ArrayList<>();list9.add("w");list9.add("x");list9.add("y");list9.add("z");map.put('9',list9);
List<String> list;
list = map.get(digits.charAt(0));
for(int i = 1;i<digits.length();i++){
List<String> temp = map.get(digits.charAt(i));
list = mergeList(list,temp);
}
return list;
}
//用于合并两个集合。
public List<String> mergeList(List<String> list1,List<String> list2){
List<String> list = new ArrayList<>();
for (String str1 : list1){
for (String str2 : list2){
list.add(str1+str2);
}
}
return list;
}
}