0017: Letter Combinations of a Phone Number

Problem Statement

Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.

A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.

Example 1:

Input: digits = "23"
Output: ["ad","ae","af","bd","be","bf","cd","ce","cf"]

Example 2:

Input: digits = ""
Output: []

Example 3:

Input: digits = "2"
Output: ["a","b","c"]

Constraints:

  • 0 <= digits.length <= 4
  • digits[i] is a digit in the range ['2', '9'].

Code Solution

class Solution:
    def letterCombinations(self, digits):
        
        cmap = {
            '2': 'abc',
            '3': 'def',
            '4': 'ghi',
            '5': 'jkl',
            '6': 'mno',
            '7': 'pqrs',
            '8': 'tuv',
            '9': 'wxyz'
        }
        
        def btrack(ix, buf, res):
            if ix == len(digits):
                if buf:
                    res.append("".join(buf))
                return
            for c in cmap[digits[ix]]:
                buf.append(c)
                btrack(ix + 1, buf, res)
                buf.pop()
                
        result = []
        btrack(0, [], result)
        return result