1. 程式人生 > >LeetCode:17. 電話號碼的字母組合

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