Leetcode: Letter Combinations of a Phone Number
letters = {
  '2': ['a', 'b', 'c'],
  '3': ['d', 'e', 'f'],
  '4': ['g','h','i'],
  '5': ['j','k','l'],
  '6': ['m','n','o'],
  '7': ['p','q','r','s'],
  '8': ['t','u','v'],
  '9': ['w','x','y','z']
}
class Solution:
  def letterCombinations(self, digits: str) -> List[str]:
    combinations = []
    self.inner(digits, '', combinations)
    return combinations
  
  def inner(self, digits: str, path: str, combos: list[str]):
    if digits == '':
      if path != '':
        combos.append(path)
      return
    first = digits[0]
    for d in letters[first]:
      self.inner(digits[1:], path + d, combos)