leetcode (力扣) 17. 电话号码的字母组合 (队列)

题目在这:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

思路分析:

就是逐个组合匹配。比如输入 234 即拿2里的字母去3里匹配,然后组成一个新的字母串再拿去4里匹配即可。
使用队列进行组合。
例如:
2 : abc
3 :def
4:ghi

  • 首先将2中的字母推入队列res中,此时res中的值为 abc。假如该队列 右进左出。
  • 记录此时队列的长度为s。 (s=3)
  • 此时弹出队列中第一个字符,拿去匹配3号对应的字母串,每次匹配一个都加入到队列中。
  • 匹配1次后队列res中的值为: b c ad ae af
  • 再次进行第二次和第三次匹配,匹配过后res中的值为 ad ae af bd be bf cd ce cf.。匹配了s次。
  • 再次记录此时的队列长度为s (s=9).
  • 继续拿队列中的所有字母去匹配4号对应的字母。匹配次数 s(s = 9)次。
  • 最后队列中的值就是我们要的答案

完整代码

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        d = [" ","*","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]
        res = []
        if len(digits) == 0:
            return res
        
        for j in d[int(digits[0])]:
            res.append(j)   # 将当前的值加入队列
        for i in range(len(digits)-1):
            length = len(res) # 记录当前队列长度
            for _ in range(length):
                temp = res.pop(0)
                for k in d[int(digits[i+1])]: # 遍历下一个字符串的值
                    res.append(temp+k)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深度不学习!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值