【算法题解5】-电话号码的字母组合

本文介绍了如何使用深度优先搜索(DFS)解决LeetCode上的算法题——电话号码的字母组合问题。给定一个仅包含数字2-9的字符串,通过数字到字母的映射找出所有可能的字母组合。例如,输入'23',输出包括'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf'等。解法利用DFS遍历所有可能的组合,对于递归的理解和应用进行了探讨。" 103678836,8417210,vb.net2019跨平台开发指南,"['vb.net', '.NET Core', '跨平台开发']
摘要由CSDN通过智能技术生成

tags:
- 回溯法
- 深度优先算法

算法题解第五题:电话号码的字母组合

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
‘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’]
示例:
输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number

解法

首先想到这是一个排列组合的问题,想到使用DFS,来遍历整个树找出所有的可能。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。实现如下

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']}
        res = [] #初始化结果列表
        def dfs(temp,index): #定义回溯函数
            if index == len(digits): #当前指数与字符串长度相等时,temp添加进结果函数结束
                res.append(temp)
                return
            c = digits[index] # c = 当前指数对应字符
            letters = phone[c] #letters =字符对应列表
            for i in letters: #对列表中每个元素进行深度搜索
                dfs(temp+i,index+1)
        if not digits: #特例:输入字符串为空,
            return res
        else:
            dfs("",0)
            return res

自己一直对递归的用法没有理解透彻,这道也是思路能想明白但是对于实现的写法抓耳挠腮,以上实现也是借鉴题解中大佬所写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值