LeetCode题解(0017):九键手机按键的字母组合(Python)

题目:原题链接(中等)

标签:字符串、回溯算法

解法时间复杂度空间复杂度执行用时
Ans 1 (Python) O ( 3 N + 4 M ) O(3^N+4^M) O(3N+4M) O ( 3 N + 4 M ) O(3^N+4^M) O(3N+4M)32ms (95.50%)
Ans 2 (Python) O ( 3 N + 4 M ) O(3^N+4^M) O(3N+4M) O ( 3 N + 4 M ) O(3^N+4^M) O(3N+4M)32ms (95.50%)
Ans 3 (Python)

LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。

解法一(枚举法):

def letterCombinations(self, digits: str) -> List[str]:
    phone = {"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"]}

    ans = [""]
    for d in digits:
        if d in phone:
            new = []
            for item in ans:
                for c in phone[d]:
                    new.append(item + c)
            ans = new

    return ans

解法二(不需要剪枝的回溯算法):

测试用例中不包含字符1和字符0

def letterCombinations(self, digits: str) -> List[str]:
    phone = {"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 backtrack(now, next_digits):
        if not next_digits:
            ans.append(now)
        else:
            for d in phone[next_digits[0]]:
                backtrack(now + d, next_digits[1:])

    ans = []
    if digits:
        backtrack("", digits)
    return ans
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值