【Leetcode 17】电话号码的字母组合

题目描述

在这里插入图片描述

解题思路

解法一:

python代码

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        hash = {'1':"", '2':"abc", '3':"def", '4':"ghi", '5':"jkl", '6':"mno", '7':"pqrs", '8':"tuv", '9':"wxyz"}
        if len(digits) == 0:
            return []
        product = ['']
        for i in digits:
            res = []
            for j in product:
                for k in hash[i]:
                    res.append(j+k)
            product = res
        return product

解法二:回溯法

“回溯”指的是“状态重置”,思想是通过枚举所有可能的情况来找到所有解。如果一个候选解被发现并不是可行解,那就舍弃,回到前面的步骤对其进行修改,重新尝试找到新条件的可行解。
可理解为:通过回溯前的选择和回溯后的撤销来求出相应结果集的一个过程。
全排列的题目一般用回溯思想解决
本题以digits=“23”为例
在这里插入图片描述

python代码

class Solution(object):
    def letterCombinations(self, digits):
        if len(digits) == 0:
            return []
        d = {1: "", 2: "abc", 3: "def", 4: "ghi", 5: "jkl", 6: "mno", 7: "pqrs", 8: "tuv", 9: "wxyz"}
        res = []
        track = []
        # digits,0,d:三个参数共同确定可以选择的列表
        self.dfs(digits, 0, track, res, d)
        return res

    def dfs(self, digits, index, path, res, d):
        if len(path) == len(digits):
            res.append("".join(path))
            return
        digit = int(digits[index])  # // 获取第i位数字
        # 获取第i为数字对应的各个字母
        for c in d[digit]:
            path.append(c)
            self.dfs(digits, index + 1, path, res, d)
            path.pop()
            
if __name__ == '__main__':
    s = Solution()
    # res = s.letterCombinations("23")
    res = s.letterCombinations("5678")
    print(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值