力扣每日打卡8月26日打卡(17. 电话号码的字母组合,中等)回溯法,未做出,看懂

在这里插入图片描述

方法:回溯法

实现原理:回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。

实际代码:创建第两个数组,第一个数组list1是临时数组,第二个数组lsit2是return数组。
一边遍历所有数字,一边放入第一个数组,等遍历所有的数字,统一加进第二个数组。第一遍查找完所有字母后,pop最后一个元素,更换元素再输出
假设输出为‘234’
list1 ->‘a’ ->‘a’,‘d’ ->‘a’,‘d’,‘g’->
list2->‘adg’->
list1->‘a’,‘d’->‘a’,‘d’,‘h’
list2->‘adh’->
list1->‘a’,‘d’->‘a’,‘d’,‘i’
list2->‘adi’->
list1->‘a’,‘d’->‘a’->‘a’,‘e’’->‘a’,‘e’,‘g’
list2->‘aeg’->就这样回溯下去

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if len(digits) == 0:
            return []
            # 创建字典记得写,
        dict1 = {
            '2':'abc',
            '3':'def',
            '4':'ghi',
            '5':'jkl',
            '6':'mno',
            '7':'pqrs',
            '8':'tuv',
            '9':'wxyz'
        }

        def backtrack(index: int):
            if index == len(digits):
                list2.append(''.join(list1))
            else:
                digit = digits[index]
                for i in dict1[digit]:
                    list1.append(i)
                    backtrack(index + 1)
                    list1.pop()
        list1 = []
        list2 = []
        backtrack(0)

        return list2

在这里插入图片描述
朋友们看完觉得有帮助可以点个赞,希望能帮到大家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值