【LeetCode】17.电话号码的字母组合(Python)

题目说明:

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
题目链接:17. 电话号码的字母组合

示例 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]:
        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']}
        size = len(digits)
        ans = []
        if size == 0:
            return ans
        chars = []
        for i in digits:
            chars.append(dic.get(i))
        res = []
        def backtrack(res, index):
            if len(res) == size:
                ans.append(''.join(res))
                return
            for i in range(index, size):
                for j in range(len(chars[i])):
                    res.append(chars[i][j])
                    backtrack(res, i + 1)
                    res.pop()
        backtrack(res, 0)
        return ans

这是我学回溯以来第一次自己实现,比较激动,所以记录一下。但是代码仍然有优化的空间。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值