1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package algorithm;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
public class LetterCombinationsOfAPhoneNumber {
public static List<String> letterCombinations(String digits) { List<String> combinations = new ArrayList<>(); if (digits.length() == 0) { return combinations; } backtrack(combinations, phoneMap, digits, 0, new StringBuffer()); return combinations; }
static Map<Character, String> phoneMap = new HashMap<Character, String>() {{ put('2', "abc"); put('3', "def"); put('4', "ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz"); }};
private static void backtrack(List<String> combinations, Map<Character, String> phoneMap, String digits, int index, StringBuffer combination) { if (index == digits.length()) { combinations.add(combination.toString()); } else { char first = digits.charAt(index); String letters = phoneMap.get(first); for (int i = 0; i < letters.length(); i++) { combination.append(letters.charAt(i)); backtrack(combinations, phoneMap, digits, index + 1, combination); combination.deleteCharAt(index); } } }
public static void main(String[] args) { String digits = "23"; System.out.println(letterCombinations(digits)); } }
|