Combinations For Telephone Pad I

Given a telephone keypad, and an int number, print all words which are possible by pressing these numbers, the output strings should be sorted.

{0 : "", 1 : "", 2 : "abc", 3 : "def", 4 : "ghi", 5 : "jkl", 6 : "mno", 7 : "pqrs", 8 : "tuv", 9 : "wxyz"}

Assumptions:

  • The given number >= 0

Examples:

if input number is 231, possible words which can be formed are:

[ad, ae, af, bd, be, bf, cd, ce, cf]

Base Case: (only one digit)
    1. perform lookup on digit
    1. return append(partial_result, digit_lookup)

Recursive Rule: (more than one digit)
    1. extract the largest digit
    1. perform lookup on digit
    1. recursive call for each corresponding letter

Tree:                                   

Solution:

number_map = {
    0 : "", 1 : "", 2 : "abc", 3 : "def", 
    4 : "ghi", 5 : "jkl", 6 : "mno",
    7 : "pqrs", 8 : "tuv", 9 : "wxyz"
}

def telephoneCombinations(number: int):  
    # before helper
    # 645 -> 456
    
    sorted_number = int(sort(str(number))
    
    return combinationHelper(sorted_number, "")

def combinationHelper(number: int, partial_result: str, result : [str]) -> [str]:
    # lookup
    keypad_letters = number_map[number]
    
    # base case
    if keypad_letters == "":
        return result.append(partial_result)
        
    # recursion rule
    result: [str] = []
    for letter in keypad_letters:
        updated_number = int(number / 10)
        updated_partial_result = letter + partial_result
        result = combinationHelper(updated_number, updated_partial_result)
    
    return result
    
    

Last updated

Was this helpful?