【算法题】17. 电话号码的字母组合-力扣(LeetCode)

【算法题】17. 电话号码的字母组合-力扣(LeetCode)

1.题目

下方是力扣官方题目的地址

17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

img

示例 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'] 的一个数字。

2.题解

该题是比较典型的回溯题

思路

  • 题目中提供的digits是号码,我们要想得到字母的组合,必须要找到数字所对应的字母,由于数字给定1-9,很容易想到用哈希表来对应,而python中类似于哈希表的数据结构是字典,所以我们就用字典来对应字母
di={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
  • 选择号码所对应的字母是一层一层来的,我们很容易想到树结构,而树结构就可以想到深度优先搜索。

    比如当digits=“23”时,这颗树一共有两层,第一层选2所对应的abc,第二层选3所对应的def

    而且没有其他的要求,因此不用剪枝

    所以就以digits=“23”为例来画一个树

    在这里插入图片描述

依据这个树结构,我们就很容易写出dfs的函数了

Python代码

class Solution(object):
    def letterCombinations(self, digits):
        global s
        """
        :type digits: str
        :rtype: List[str]
        """
        global rev
        di={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'} # 利用哈希表来将数字与字母对应起来
        ans,rev=[],''                # ans为输出,rev为ans中的元素,即一个已经选好的组合
        def f(d):
            global rev
            if d==len(digits):return 
            for i in di.get(digits[d]): # "di.get(digits[d])" 表示这一层中被选择的字母 
                rev+=i
                if d==len(digits)-1:ans.append(rev)  # 递归到树的最底层时表明已经选好,添加到ans中去
                f(d+1)
                rev=rev[:-1]       # 回溯
        f(0)
        return ans
                

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值