class Solution {
public List<String> letterCombinations(String digits) {
List<String> rs=new ArrayList<>();
Map<Integer,String> map=new HashMap<>();
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");
List<Integer> keyList= new ArrayList<>();
for (int i = 0; i <digits.length(); i++) {
keyList.add(Integer.parseInt(String.valueOf(digits.charAt(i))));
}if (keyList.size()==0){
} else if (keyList.size()==1){
String s = map.get(keyList.get(0));
char[] chars = s.toCharArray();
for (char aChar : chars) {
String s1 = String.valueOf(aChar);
rs.add(s1);
}
}else if(keyList.size()==2){
String s1 = map.get(keyList.get(0));
String s2 = map.get(keyList.get(1));
List<String> strings = mulString(s1, s2);
for (String string : strings) {
rs.add(string);
}
}else if (keyList.size()==3){
String s1 = map.get(keyList.get(0));
String s2 = map.get(keyList.get(1));
String s3 = map.get(keyList.get(2));
List<String> list3=new ArrayList<>();
List<String> strings = mulString(s1, s2);
char[] chars = s3.toCharArray();
for (char aChar : chars) {
list3.add(String.valueOf(aChar));
}
for (int i = 0; i < strings.size(); i++) {
for (int j = 0; j < list3.size(); j++) {
rs.add(strings.get(i)+list3.get(j));
}
}
}else {
String s1 = map.get(keyList.get(0));
String s2 = map.get(keyList.get(1));
String s3 = map.get(keyList.get(2));
String s4 = map.get(keyList.get(3));
List<String> list3=new ArrayList<>();
List<String> listTemp=new ArrayList<>();
List<String> list4=new ArrayList<>();
List<String> strings = mulString(s1, s2);
char[] chars = s3.toCharArray();
for (char aChar : chars) {
list3.add(String.valueOf(aChar));
}
char[] chars1 = s4.toCharArray();
for (char c : chars1) {
list4.add(String.valueOf(c));
}
for (int i = 0; i < strings.size(); i++) {
for (int j = 0; j < list3.size(); j++) {
listTemp.add(strings.get(i)+list3.get(j));
}
}
for (int i = 0; i < listTemp.size(); i++) {
for (int j = 0; j < list4.size(); j++) {
rs.add(listTemp.get(i)+list4.get(j));
}
}
}
return rs;
}
public List<String> mulString(String a,String b){
char[] chars1 = a.toCharArray();
char[] chars2 = b.toCharArray();
List<String> list1=new ArrayList<>();
List<String> list2=new ArrayList<>();
List<String> rs=new ArrayList<>();
for (char c : chars1) {
list1.add(String.valueOf(c));
}
for (char c : chars2) {
list2.add(String.valueOf(c));
}
for (int i = 0; i < list1.size(); i++) {
for (int j = 0; j < list2.size(); j++) {
rs.add(list1.get(i)+list2.get(j));
}
}
return rs;
}
}