LeetCode:17. 电话号码的字母组合

1、题目描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例:

  输入:"23"

  输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

2、题解

2.1、解法一

  原理:回溯算法

class Solution:
    dic = {
        "2": ["a", "b", "c"],
        "3": ["d", "e", "f"],
        "4": ["g", "h", "i"],
        "5": ["j", "k", "l"],
        "6": ["m", "n", "o"],
        "7": ["p", "q", "r", "s"],
        "8": ["t", "u", "v"],
        "9": ["w", "x", "y", "z"],
    }

    def sum_letter(self, l1, l2):
        ret = []
        for i in range(len(l1)):
            for j in range(len(l2)):
                ret.append(l1[i]+l2[j])
        return ret

    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        n = len(digits)
        if n == 0:
            return []
        first = digits[0]
        other = digits[1:]
        if len(digits) == 1:
            return self.dic[digits]
        ret = self.sum_letter(self.dic[first],self.letterCombinations(other))
        return ret

  

猜你喜欢

转载自www.cnblogs.com/bad-robot/p/10064909.html