Q17 - Medium - 電話號(hào)碼的字母組合

給定一個(gè)僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。

給出數(shù)字到字母的映射如下(與電話按鍵相同)。注意 1 不對(duì)應(yīng)任何字母。

image

示例:

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

說(shuō)明:
盡管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。

循環(huán)排列組合 44 ms

class Solution:
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if not digits:
            return []
        d = {"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"]}
        stack = d[digits[0]]
        for digit in digits[1:]:
            alpha_list = d[digit]
            new_stack = []
            for s in stack:
                for a in alpha_list:
                    new_stack.append(s+a)
            stack = new_stack
        return stack

回溯 48 ms

class Solution:
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        nums = ["", "", "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
        res = []
        if not digits:
            return res
        self.back_track(digits, nums, res, "", 0)
        return res
    
    def back_track(self, digits, nums, res, temp, index):
        if index >= len(digits):
            res.append(temp)
        else:
            keyboard_nums = nums[int(digits[index])]
            for num in keyboard_nums:
                self.back_track(digits, nums, res, temp+num, index+1)
        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容