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
| class Solution { private static final String[] NUMBER_OFFSET_TO_LETTERS_MAP = new String[8];
static { NUMBER_OFFSET_TO_LETTERS_MAP[0] = "abc"; NUMBER_OFFSET_TO_LETTERS_MAP[1] = "def"; NUMBER_OFFSET_TO_LETTERS_MAP[2] = "ghi"; NUMBER_OFFSET_TO_LETTERS_MAP[3] = "jkl"; NUMBER_OFFSET_TO_LETTERS_MAP[4] = "mno"; NUMBER_OFFSET_TO_LETTERS_MAP[5] = "pqrs"; NUMBER_OFFSET_TO_LETTERS_MAP[6] = "tuv"; NUMBER_OFFSET_TO_LETTERS_MAP[7] = "wxyz"; }
public List<String> letterCombinations(String digits) { if (digits.isEmpty()) { return Collections.emptyList(); }
List<String> resultList = new ArrayList<>(); StringBuilder sb = new StringBuilder(); backtrack(resultList, sb, digits, 0); return resultList; }
private void backtrack(List<String> resultList, StringBuilder sb, String digits, int i) { if (i == digits.length()) { resultList.add(sb.toString()); return; }
char number = digits.charAt(i); String letters = NUMBER_OFFSET_TO_LETTERS_MAP[number - '2']; for (int j = 0; j < letters.length(); j++) { sb.append(letters.charAt(j)); backtrack(resultList, sb, digits, i + 1); sb.deleteCharAt(sb.length() - 1); } } }
|
References
17. Letter Combinations of a Phone Number