题目描述:
给定一个仅包含数字 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’] 的一个数字。
解题思路:
暴力,模拟五种情况。不说了上代码。
代码:
public class LC17 {
public List<String> letterCombinations(String digits) {
//1.为空的情况
if (digits == ""){
ArrayList<String> stringList = new ArrayList<>();
return stringList;
}
HashMap<Character, List<String>> map = new HashMap<>();
ArrayList<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");
map.put('2',list1);
ArrayList<String> list2 = new ArrayList<>();
list2.add("d");
list2.add("e");
list2.add("f");
map.put('3',list2);
ArrayList<String> list3 = new ArrayList<>();
list3.add("g");
list3.add("h");
list3.add("i");
map.put('4',list3);
ArrayList<String> list4 = new ArrayList<>();
list4.add("j");
list4.add("k");
list4.add("l");
map.put('5',list4);
ArrayList<String> list5 = new ArrayList<>();
list5.add("m");
list5.add("n");
list5.add("o");
map.put('6',list5);
ArrayList<String> list6 = new ArrayList<>();
list6.add("p");
list6.add("q");
list6.add("r");
list6.add("s");
map.put('7',list6);
ArrayList<String> list7 = new ArrayList<>();
list7.add("t");
list7.add("u");
list7.add("v");
map.put('8',list7);
ArrayList<String> list8 = new ArrayList<>();
list8.add("w");
list8.add("x");
list8.add("y");
list8.add("z");
map.put('9',list8);
List<String> ansList = new ArrayList<>();
//2.仅一个按键情况
if (digits.length() == 1){
List<String> stringList = map.get(digits.charAt(0));
return stringList;
}
//3.两个按键情况
else if (digits.length() == 2){
//将List<String>转换为String[]数组
String[] str1 = map.get(digits.charAt(0)).toArray(new String[map.get(digits.charAt(0)).size()]);
String[] str2 = map.get(digits.charAt(1)).toArray(new String[map.get(digits.charAt(1)).size()]);
for (int i = 0; i < str1.length; i++){
for (int j = 0; j < str2.length; j++){
ansList.add(str1[i] + str2[j]);
}
}
}
//3.三个按键情况
else if (digits.length() == 3){
String[] str1 = map.get(digits.charAt(0)).toArray(new String[map.get(digits.charAt(0)).size()]);
String[] str2 = map.get(digits.charAt(1)).toArray(new String[map.get(digits.charAt(1)).size()]);
String[] str3 = map.get(digits.charAt(2)).toArray(new String[map.get(digits.charAt(2)).size()]);
for (int i = 0; i < str1.length; i++){
for (int j = 0; j < str2.length; j++){
for (int k = 0; k < str3.length; k++) {
ansList.add(str1[i] + str2[j] + str3[k]);
}
}
}
}
//4.四个按键情况
else if (digits.length() == 4){
String[] str1 = map.get(digits.charAt(0)).toArray(new String[map.get(digits.charAt(0)).size()]);
String[] str2 = map.get(digits.charAt(1)).toArray(new String[map.get(digits.charAt(1)).size()]);
String[] str3 = map.get(digits.charAt(2)).toArray(new String[map.get(digits.charAt(2)).size()]);
String[] str4 = map.get(digits.charAt(3)).toArray(new String[map.get(digits.charAt(3)).size()]);
for (int i = 0; i < str1.length; i++){
for (int j = 0; j < str2.length; j++){
for (int k = 0; k < str3.length; k++) {
for (int t = 0; t < str4.length; t++) {
ansList.add(str1[i] + str2[j] + str3[k] + str4[t]);
}
}
}
}
}
return ansList;
}
public static void main(String[] args) {
LC17 obj = new LC17();
List<String> list = obj.letterCombinations("2345");
for (String str : list){
System.out.println(str);
}
}
}