17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

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

 

 

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:

输入:digits = ""
输出:[]
示例 3:

输入:digits = "2"
输出:["a","b","c"]
 

提示:

0 <= digits.length <= 4
digits[i] 是范围 ['2', '9'] 的一个数字。

回溯法(求可行性解)

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits: return []
        d = {
            '2': 'abc',
            '3': 'def',
            '4': 'ghi',
            '5': 'jkl',
            '6': 'mno',
            '7': 'pqrs',
            '8': 'tuv',
            '9': 'wxyz',
        }

        # 寻求可行解 回溯法
        def backtrack(res, index, l, path):
            if (len(path) == l):
                res.append(''.join(path))
            else:
                key = digits[index]
                for s in d[key]:
                    path.append(s)
                    backtrack(res, index + 1, l, path)
                    path.pop() # 满足条件,开始回溯

        l = len(digits)
        res = []
        path = []
        backtrack(res, 0, l, path)
        return res

 

posted @ 2021-10-27 21:52  风不再来  阅读(25)  评论(0编辑  收藏  举报