LeetCode 17 [Letter Combinations of a Phone Number]

原题

给一个不包含01的数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。

下图的手机按键图,就表示了每个数字可以代表的字母。

样例
给定 "23"

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

解题思路

  • Backtracking,递归求解
  • 对于每一个数字可能对应的字母,看做树的一层

完整代码

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

推荐阅读更多精彩内容