Skip to content

Latest commit

 

History

History
66 lines (58 loc) · 1.88 KB

17.md

File metadata and controls

66 lines (58 loc) · 1.88 KB

Solution

Recursion with return value

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if not digits: return []
        
        numToLetter = {'2': "abc", '3':"def", '4':"ghi", '5': "jkl", '6': "mno", '7':"pqrs", '8':"tuv", '9':"wxyz"}
        def helper(digits):
            if len(digits) == 1:
                return [l for l in numToLetter[digits]]
            res = []
            combs = helper(digits[1:])
            
            for comb in combs:
                for letter in numToLetter[digits[0]]:
                    res.append(letter + comb)
            
            return res
        
        return helper(digits)

or

def letterCombinations2(digits):
    numToLetter = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl',
                    '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'}
    def dfs(pos):
        if pos == len(digits) - 1:
            return [l for l in numToLetter[digits[pos]]]

        combs = dfs(pos + 1)
        res = []
        for comb in combs:
            for l in numToLetter[digits[pos]]:
                res.append(l + comb)
        return res

    if not digits: return []
    return dfs(0)

Recursion without return val

class Solution:
    def __init__(self):
        self.num2letter = {'2': 'abc', '3': 'def', '4': 'ghi', '5': 'jkl',
                           '6': 'mno', '7': 'pqrs', '8': 'tuv', '9': 'wxyz'}
    def letterCombinations(self, digits):
        ret = []
        if not digits:  return ret

        self.dfs(0, digits, "", ret)
        return ret

    def dfs(self, start, digits, path, res):
        if start == len(digits):
            res.append(path)
            return
        for letter in self.num2letter[digits[start]]:
            self.dfs(start + 1, digits, path + letter, res)