给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class LetterCombinations {public List<String> letterCombinations(String digits) {List<String> result = new ArrayList<>();if (digits == null || digits.length() == 0) {return result;}Map<Character, Character[]> map = new HashMap<>();map.put('2', new Character[]{'a','b','c'});map.put('3', new Character[]{'d','e','f'});map.put('4', new Character[]{'g','h','i'});map.put('5', new Character[]{'j','k','l'});map.put('6', new Character[]{'m','n','o'});map.put('7', new Character[]{'p','q','r', 's'});map.put('8', new Character[]{'t','u','v'});map.put('9', new Character[]{'w','x','y', 'z'});select(result, 0, new StringBuffer(), map, digits);return result;}private void select(List<String> result, int index, StringBuffer word, Map<Character, Character[]> map, String digits) {if (word.length() == digits.length()) {result.add(word.toString());} else {char c = digits.charAt(index);Character[] characters = map.get(c);for (Character character : characters) {word.append(character);select(result, index + 1, word, map, digits);word.deleteCharAt(index);}}}}

