当前位置: 首页 > news >正文

python-leetcode 56.电话号码的字母组合

题目:

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

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


方法一:深度优先搜索,回溯

递归函数

首先使用哈希表存储每个数字对应的所有可能的字母,然后进行回溯操作。回溯过程中维护一个字符串,表示已有的字母排列,该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列。

.

class Solution(object):
    def letterCombinations(self, digits):
        """
        :type digits: str
        :rtype: List[str]
        """
        if not digits: #空字符串,则返回空列表 
            return []
        phonemap={  #映射数字到对应的字母
            "2":"abc",
            "3":"def",
            "4":"ghi",
            "5":"jkl",
            "6":"mno",
            "7":"pqrs",
            "8":"tuv",
            "9":'wxyz',
        }
        def backtrack(index): #回溯函数 ,处理当前的数字位置
            if index==len(digits):
                combinations.append("".join(combination))#将当前combination中的字母组合成字符串,加入 combinations 结果列表
            else:  #处理当前数字对应的所有可能字母
                digit=digits[index]  #取出当前 index 位置的数字
                for letter in phonemap[digit]:#遍历当前数字 digit 对应的所有字母,2对应“a","b","c"
                    combination.append(letter) #将当前 letter 加入 combination,表示选择该字母
                    backtrack(index+1)#递归调用 ,处理下一个数字的字母组合
                    combination.pop()#回溯:撤销当前选择的字母,尝试下一个可能的字母
        combination=[]#存储当前选择的字母
        combinations=[]#用于存储所有可能的字母组合结果
        backtrack(0)
        return combinations #所有可能的字母组合

时间复杂度:O(3 **m ×4 **n ),其中 m 是输入中对应 3 个字母的数字个数(包括数字 2、3、4、5、6、8),n 是输入中对应 4 个字母的数字个数(包括数字 7、9),m+n 是输入数字的总个数。

空间复杂度:O(m+n),其中 m 是输入中对应 3 个字母的数字个数,n 是输入中对应 4 个字母的数字个数,m+n 是输入数字的总个数。除了返回值以外,空间复杂度主要取决于哈希表以及回溯过程中的递归调用层数,哈希表的大小与输入无关,可以看成常数,递归调用层数最大为 m+n

源自力扣官方题解

相关文章:

  • 在Electron中实现实时下载进度显示的完整指南
  • 深入解析 SQL 事务:确保数据一致性的关键
  • 程序化广告行业(27/89):供应商筛选、比稿流程与广告透明化要点
  • android开发:组件事件汇总
  • 停车场停车位数据集,标注停车位上是否有车,平均正确识别率99.5%,支持yolov5-11, coco json,darknet,xml格式标注
  • Centos7更换仓库源为阿里云镜像
  • 使用 libevent 构建高性能网络应用
  • 点击事件+长按实现
  • 如何在ubuntu上安装zookeeper
  • 3DXML 与 SOLIDWORKS 格式转换:技术协同及迪威模型方案
  • 在 Vue 项目中引入静态图片有多种方式
  • 基于PyQt5与Open3D的轻量化BIM工具开发指南(上)‌
  • 从 0 到 1 掌握鸿蒙 AudioRenderer 音频渲染:我的自学笔记与踩坑实录(API 14)
  • npm 报错 unable to resolve dependency tree
  • C++学习之云盘项目nginx
  • C++继承 ---- 继承是面向对象三大特性之一【好处:可以减少重复的代码】
  • Z 轴热膨胀系数:PCB 可靠性的关键因素与选材策略
  • 笔记本电脑关不了机是怎么回事 这有解决方法
  • 【R语言】二项分布,正态分布,极大似然估计实现
  • PC企业微信HOOK / iPad企业微信协议最新版研究
  • 郑钦文憾负高芙,止步WTA1000罗马站四强
  • 俄方代表团抵达土耳其,俄乌直接谈判有望于当地时间上午重启
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛
  • “大鼻子情圣”德帕迪约因性侵被判缓刑,还有新的官司等着他
  • 中国-拉共体论坛第四届部长级会议北京宣言
  • 长三角议事厅·周报|从模速空间看上海街区化AI孵化模式