LeetCode_17_中等_电话号码的字母组合

news2024/11/18 21:53:12

文章目录

  • 1. 题目
  • 2. 思路及代码实现(Python)
    • 2.1 回溯


1. 题目

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例 1:

输入: d i g i t s = " 23 " digits = "23" digits="23"
输出: [ " a d " , " a e " , " a f " , " b d " , " b e " , " b f " , " c d " , " c e " , " c f " ] ["ad","ae","af","bd","be","bf","cd","ce","cf"] ["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入: d i g i t s = " " digits = "" digits=""
输出: [ ] [ ] []

示例 3:

输入: d i g i t s = " 2 " digits = "2" digits="2"
输出: [ " a " , " b " , " c " ] ["a","b","c"] ["a","b","c"]


提示

  • 0 < = d i g i t s . l e n g t h < = 4 0 <= digits.length <= 4 0<=digits.length<=4
  • d i g i t s [ i ] digits[i] digits[i] 是范围 [ ′ 2 ′ , ′ 9 ′ ] ['2', '9'] [2,9] 的一个数字。

2. 思路及代码实现(Python)

2.1 回溯

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

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

在这里插入图片描述

时间复杂度: O ( 3 m × 4 n ) O(3^m \times 4^n) O(3m×4n)),其中 m m m 是输入中对应 3 3 3 个字母的数字个数(包括数字 2 2 2 3 、 4 、 5 、 6 、 8 3、4、5、6、8 34568), n n n 是输入中对应 4 4 4 个字母的数字个数(包括数字 7 、 9 7、9 79 m + n m+n m+n 是输入数字的总个数。当输入包含 m m m 个对应 3 3 3 个字母的数字和 n n n 个对应 4 4 4 个字母的数字时,不同的字母组合一共有 3 m × 4 n 3^m \times 4^n 3m×4n 种,需要遍历每一种字母组合。空间复杂度主要是递归调用的占用: O ( m + n ) O(m+n) O(m+n)

class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        if not digits:
            return list()
        
        phoneMap = {
            "2": "abc",
            "3": "def",
            "4": "ghi",
            "5": "jkl",
            "6": "mno",
            "7": "pqrs",
            "8": "tuv",
            "9": "wxyz",
        }

        def backtrack(index: int):
            if index == len(digits):
                combinations.append("".join(combination))
            else:
                digit = digits[index]
                for letter in phoneMap[digit]:
                    combination.append(letter)
                    backtrack(index + 1)
                    combination.pop()

        combination = list()
        combinations = list()
        backtrack(0)
        return combinations

执行用时:34 ms
消耗内存:16.44 MB

参考来源:力扣官方题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1428515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国(合一)民营企业家高峰论坛暨2024精英校友会10周年庆在上饶举行!

1月29日下午&#xff0c;“中国&#xff08;合一&#xff09;民营企业家高峰论坛暨2024精英校友会10周年庆典”在上饶市饶商金茂诚悦酒店举行。出席会议的嘉宾有民建上饶市委会专职副主委方乾文、民建上饶市委会秘书长尹林、上饶市民营&#xff08;个私)经济协会会长傅利平、上…

大数据时代效率革新:数字化管理助力企业迈向全新高度-亿发

在大数据时代的浪潮中&#xff0c;数字化管理成为企业不可或缺的发展趋势。以信息技术为支撑&#xff0c;数字化管理为企业带来了前所未有的机遇和挑战。让我们一起探讨&#xff0c;在这个数字时代&#xff0c;数字化管理如何引领企业走向更加高效、智能的未来。 1. 数据驱动决…

【JAVA】ReentrantLock 显式锁定的类

ReentrantLock 是 Java 中用于进行显式锁定的类&#xff0c;它提供了与 synchronized 关键字类似的互斥性和可重入性&#xff0c;但相比于 synchronized&#xff0c;它提供了更灵活的锁定方式。下面对 ReentrantLock 进行详解&#xff1a; 一、ReentrantLock 是什么&#xff1…

基于JAVA+SpringBoot+Vue的前后端分离的医院管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着计算机科学的迅猛…

某赛通电子文档安全管理系统 UploadFileList 任意文件读取漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

动态微信小程序码和开发者工具解析小程序码

一、动态生成微信小程序码 1、方式一 微信官方网站&#xff0c;对已发布的小程序&#xff0c;提供了一个快捷的入口&#xff0c;输入微信小程序的page页面即可。 page页面可以通过右侧开启入口获取 也可以通过开发者工具左下角的页面地址和参数地址那里获取到 二、生成的小…

异步编程,到底有什么用?

关键词&#xff1a;高性能、架构设计、异步思想、场景落地 文章导读 场景切入 先来看一个日常生活快递寄件场景&#xff0c;从寄件人&#xff08;寄件&#xff09;到收件人&#xff08;收件&#xff09;&#xff0c;全流程如下 当你准备寄送一个包裹时&#xff0c;通常你可以…

智慧水务(水厂)大数据平台,打造水务运营管理驾驶舱

智慧水务运营管理平台 全天候把握水源、水厂、管网、泵站等生产调度全过程数据。各环节数据联动&#xff0c;形成设备自动运行的预设逻辑&#xff0c;简化人工操作&#xff0c;实现无人值守。并对取水总能耗、吨水电耗、运行经济性成本加以分析&#xff0c;辅助水务系统节能降…

2024年混合云:趋势和预测

混合云环境对于 DevOps 团队变得越来越重要&#xff0c;主要是因为它们能够弥合公共云资源的快速部署与私有云基础设施的安全和控制之间的差距。这种环境的混合为 DevOps 团队提供了灵活性和可扩展性&#xff0c;这对于大型企业中的持续集成和持续部署 (CI/CD) 至关重要。 在混…

BRAIN :帕金森病中与痴呆相关的动态功能连接改变

fMRI成像手段由于其在高空间分辨率的优势获得了疾病研究的青睐&#xff0c;越来越多的疾病研究使用fMRI手段来通过找到特异的神经标记物从而提升临床治疗的诊断效力以及准确率。但是&#xff0c;功能磁共振受到其时间分辨率相对较低这一缺点的影响&#xff0c;在对疾病时间特异…

opencv c++ (7):模糊与锐化

1. 高斯模糊 Size越大模糊程度越大&#xff0c;原理不在介绍&#xff0c;直接看使用方法&#xff0c;一般都用高斯模糊&#xff0c;其他模糊方法可自寻探索 #include <iostream> #include<opencv.hpp> #include<opencv2\highgui\highgui.hpp>using namespa…

幻兽帕鲁能在Mac上运行吗?幻兽帕鲁Palworld新手攻略

幻兽帕鲁能在Mac上运行吗&#xff1f; 《幻兽帕鲁》目前还未正式登陆Mac平台&#xff0c;不过通过一些方法是可以让游戏在该平台运行的。 虽然游戏不能在最高配置下运行&#xff0c;但如果你安装了CrossOver这个软件&#xff0c;就可以玩了。这是为Mac、Linux和ChromeOS等设计…

【unity小技巧】FPS简单的射击换挡瞄准动画控制

文章目录 射击动画控制换弹动画瞄准动画完结 射击动画控制 换弹动画 调用 瞄准动画 问题&#xff1a;瞄准时&#xff0c;但是动画会卡住&#xff0c;不会播放瞄准的待机动画 修改 调用 动画如果太快可以去修改播放速度 播放速度变慢了&#xff0c;可能导致切换待机动画也…

Verdi简介

3.1.1 Verdi的历史 相信做IC验证的朋友或多或少都使用过VCS和Verdi这两个工具&#xff0c;这两个工具目前都属于synopsys公司&#xff0c;但是Verdi的来源可谓一路坎坷。 Verdi最开始是由novas公司设计的&#xff0c;在2008年&#xff0c;被台湾的EDA厂家springsoft&#xff08…

【博士每天一篇论文-算法】Continual Learning Through Synaptic Intelligence,SI算法

阅读时间&#xff1a;2023-11-23 1 介绍 年份&#xff1a;2017 作者&#xff1a;Friedemann Zenke&#xff0c;巴塞尔大学弗里德里希米歇尔研究所(FMI) Ben Poole&#xff0c;谷歌 DeepMind 研究科学家 期刊&#xff1a; International conference on machine learning. PMLR…

jdk17新特性—— record关键字(类似于Lombok功能)

目录 一、record关键字的概述1.1、概述1.2、特性 二、record关键字的代码示例2.1、record关键字代码示例2.2、record关键字代码.class文件示例2.3、record关键字代码示例 总结说明 三、record关键字实现密封接口的代码示例3.1、record关键字实现密封接口的代码示例 四、record关…

Linux 常用命令行

Linux (Ubuntu) 常用操作命令行 1. 打开终端&#xff1a;ctrl alt t; 2. 清屏&#xff1a;clear; 3. 进入目录&#xff1a;cd path;[/ 根目录&#xff1b;./ 当前目录&#xff1b;../ 上一级] 4. 返回上一级目录: cd ..; 5. 显示工作路径: pwd; 6. 列表显示文件、文件夹&…

PAT-Apat甲级题1004(python和c++实现)

PTA | 1004 Counting Leaves 1004 Counting Leaves 作者 CHEN, Yue 单位 浙江大学 A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child. Input Specification: Each input file contains one te…

【超详细教程】2024最新Pytorch安装教程(同时讲解安装CPU和GPU版本)

目录 一、前言 二、pytorch简介 三、安装准备工作 3.1、下载Anaconda 四、判断是否有NVIDIA显卡 五、安装pytorch-CPU版本 六、安装pytorch-GPU版本 6.1、查看CUDA显卡驱动版本 6.2、安装CUDA 6.3、安装CuDNN&#xff08;加速器&#xff09; 6.4、安装pytorch-GPU 七…

瑞_23种设计模式_原型模式

文章目录 1 原型模式&#xff08;Prototype Pattern&#xff09;原型模式的结构 2 实现3 案例3.1 需求3.2 设计3.3 代码实现3.3.1 浅克隆代码实现3.3.2 深克隆代码实现 3.4 总结 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《23种设计模式》的原型模式篇。本文中的部…