17. Letter Combinations of a Phone Number
Date: 2026-03-19 Difficulty: Medium Topics: Backtracking, String, Hash Map Link: https://leetcode.com/problems/letter-combinations-of-a-phone-number/
Final Solution
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
digit_to_letters = {1: "", 2: "abc", 3: "def", 4: "ghi", 5: "jkl", 6: "mno", 7: "pqrs", 8: "tuv", 9: "wxyz"}
result = []
def backtrack(curr: list, index: int):
if len(curr) == len(digits):
result.append("".join(curr.copy()))
return
digit = int(digits[index])
letters = digit_to_letters[digit]
for letter in letters:
curr.append(letter)
backtrack(curr, index + 1)
curr.pop()
backtrack([], 0)
return resultKey Learnings
- Each digit maps to 3-4 letters — loop through all letters for current digit, recurse on next digit
- Base case:
currlength ==digitslength — we’ve assigned a letter to each digit - Standard backtracking: append → recurse → pop
Complexity (using choices^depth framework)
- Choices per step: up to 4 letters per digit (7→“pqrs”, 9→“wxyz”)
- Depth: n = length of
digitsstring
Time: O(n * 4^n)
- 4^n combinations worst case
- O(n) to copy/join each combination
Space:
- Auxiliary (not counting output): O(n) — recursion depth + curr
- Total (counting output): O(n * 4^n) — up to 4^n strings of length n stored in result
- In interviews, space usually means auxiliary = O(n)