题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
代码:
public class Test3 {
@Test
public void test(){
String test = "23";
List<String> strings = new Test3().letterCombinations(test);
System.out.println(strings);
}
public List<String> letterCombinations(String digits) {
if (digits.equals("")) {
return new ArrayList<>();;
}
Map<Character,List<Character>> map = new HashMap<>();
map.put('2', Arrays.asList('a','b','c'));
map.put('3', Arrays.asList('d','e','f'));
map.put('4', Arrays.asList('g','h','i'));
map.put('5', Arrays.asList('j','k','l'));
map.put('6', Arrays.asList('m','n','o'));
map.put('7', Arrays.asList('p','q','r','s'));
map.put('8', Arrays.asList('t','u','v'));
map.put('9', Arrays.asList('w','x','y','z'));
char[] chars = digits.toCharArray();
return function(map, 0, chars, "");
}
public static List<String> function(Map<Character,List<Character>> map,Integer index,char[] chars,String temp){
if (index==chars.length-1) {
List<String> resultList = new ArrayList<>();
for (Character character : map.get(chars[index])) {
resultList.add(temp+character);
}
return resultList;
}
List<String> resultList = new ArrayList<>();
for (Character character : map.get(chars[index])) {
List<String> function = function(map, index+1, chars, temp);
for (String s : function) {
if (!resultList.contains(character+s)) {
resultList.add(character+s);
}
}
}
return resultList;
}
}