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