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

LeetCode 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(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        # 定义一个字符串列表,每个索引对应一个数字,包含该数字可以转换成的所有可能的字母
        characters = ['', '', 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
        # 获取输入数字字符串的长度
        length = len(digits)
        # 如果输入字符串为空,则直接返回空列表
        if length == 0:
            return []
        # 初始化结果列表
        res = []
        # 初始化路径数组,用于存储当前的字母组合
        path = [''] * length

        # 定义一个递归函数backtrack,用于回溯搜索所有可能的字母组合
        def backtrack(i):
            # 如果当前索引i等于数字字符串的长度,说明已经找到了一个完整的字母组合
            if i == length:
                # 将当前路径的字母组合添加到结果列表中
                res.append(''.join(path))
                # 返回是为了结束当前分支的搜索,回溯到上一个状态
                return
            # 遍历当前数字对应的所有可能的字母
            for c in characters[int(digits[i])]:
                # 将当前字母添加到路径中
                path[i] = c
                # 递归调用backtrack函数,搜索下一个数字对应的字母组合
                backtrack(i + 1)
                
        # 从第一个数字开始回溯搜索
        backtrack(0)
        # 返回所有找到的字母组合
        return res
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值