LeetCode【0017】电话号码的字母组合

本文目录

  • 1 中文题目
  • 2 最优解法:迭代法
    • 2.1 方法思路
    • 2.2 Python代码
    • 2.3 复杂度分析
  • 3 题目总结

1 中文题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
**说明:**

示例:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
输入:digits = ""
输出:[]
输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 ≤ d i g i t s . l e n g t h ≤ 4 0 \leq digits.length \leq 4 0digits.length4
  • 2 ≤ d i g i t s [ i ] ≤ 9 2 \leq digits[i] \leq 9 2digits[i]9

2 最优解法:迭代法

2.1 方法思路

方法核心

每处理一个数字,就将当前所有可能的组合与这个数字对应的字母进行组合,得到新的所有可能组合。

实现步骤

  • 初始化一个只包含空字符串的结果列表 result = []
  • 遍历输入的每个数字,对于每个数字:
    • 获取该数字对应的所有可能字母
    • 将已有的每个组合与当前数字的每个字母进行拼接,形成新的组合

方法示例

以输入"23"为例说明过程:

  • 处理’2’时:result = [] → [‘a’, ‘b’, ‘c’]
  • 处理’3’时:[‘a’, ‘b’, ‘c’] → [‘ad’, ‘ae’, ‘af’, ‘bd’, ‘be’, ‘bf’, ‘cd’, ‘ce’, ‘cf’]

2.2 Python代码

class Solution:def letterCombinations(self, digits: str) -> List[str]:# 处理空输入if not digits:return []# 数字到字母的映射字典digit_map = {'2': 'abc','3': 'def','4': 'ghi','5': 'jkl','6': 'mno','7': 'pqrs','8': 'tuv','9': 'wxyz'}# 存储结果result = ['']# 遍历每个数字for digit in digits:# 临时列表存储新的组合new_result = []# 获取当前数字对应的字母letters = digit_map[digit]# 遍历现有的组合for combo in result:# 将当前数字对应的每个字母添加到现有组合中for letter in letters:new_result.append(combo + letter)# 更新结果列表result = new_resultreturn result

2.3 复杂度分析

  • 时间复杂度: O ( 4 n ) O(4^n) O(4n) n n n是输入数字的长度
    • 每个数字最多对应 4 4 4个字母
    • 每次迭代产生的组合数呈指数增长
  • 空间复杂度: O ( 4 n ) O(4^n) O(4n)
    • 需要存储所有可能的组合
    • 空间占用主要在结果列表

3 题目总结

题目难度:中等
数据结构:数组
应用算法:迭代法

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

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

相关文章

iOS 18.2 重磅更新:6个大动作

根据外媒报道,iOS 18.2迎来重磅更新,将带来6个大动作,这是一次非常实用的更新。不过要注意的是,其中涉及到AI的功能,国行iPhone 暂时还不可用,只能等审核通过了。 1,Safari下载进度 过去通过S…

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项

《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项 《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项套接字可选项和 I/O 缓冲大小套接字多种可选项getsockopt & setsockoptSO_SNDBUF & SO_RCVBUF SO_REUSEADDR发生地址绑定…

D66【python 接口自动化学习】- python基础之数据库

day66 SQL-DQL-排序分页 学习日期:20241112 学习目标:MySQL数据库-- 135 SQL-DQL-排序分页 学习笔记: 结果查询 结果分页限制 总结 排序和分页限制的语法 2. 关键字总结:

Groovy有哪些官方文档和教程可以学习?

Groovy Language Documentation: 这是Groovy的官方文档,提供了详细的语言规范、教程和指南。您可以从这里下载JavaDoc和在线文档,以及获取关于如何开始使用Groovy的指导。[Groovy Language Documentation][1] Groovy官方教程: 官…

LeetCode 3.无重复字符的最长子串

LeetCode 3.无重复字符的最长子串 思路🧐: 使用滑动窗口哈希表,哈希表映射每一个字符串,左右指针表示当前区间,当出现一个字符串那么就将哈希表1,右指针移动,当哈希表对应位置大于1时&#xff0…

验证码处理在自动化测试中的应用

在进行自动化测试时,处理验证码是一项常见的挑战,特别是图形验证码。每次刷新都会生成新的验证码,因此我们可以采用以下两种方法来获取验证码: 获取验证码图片链接:例如 src"http://example.com/getcaptcha/123&q…

云计算在智能交通系统中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 云计算在智能交通系统中的应用 引言 云计算概述 定义与原理 发展历…

全球碳循环数据集(2000-2023)包括总初级生产力、生态系统净碳交换和生态系统呼吸变量

全球碳循环数据集(2000-2023) 数据介绍 PFTs_XGB FLUX 是一个基于 XGBOOST 机器学习模型的全球碳循环数据集。该数据集通过对全球植被功能类型(PFTs)的分类,结合了 FLUXNET、AmeriFlux 和 ICOS 通量站点的现场观测数据…

Kafka经典面试题

1、kafka消息发送的流程? producer发送过程中启动两个线程 一个main线程 一个sender线程,在main线程中先创建一个双端队列(RecordAccumlator、producerbatch),main将我们需要发送的东西经过拦截器,序列化&a…

HTB:Photobomb[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口开放扫描 再次使用nmap对靶机开放端口进行脚本、服务扫描 使用ffuf进行简单的子域名扫描 使用浏览器直接访问该域名 选取一个照片进行下载,使用Yakit进行抓包 USER_FLAG:a9afd9220ae2b5731…

蓝桥杯c++算法学习【1】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵!!! 关注博主,更多蓝桥杯nice题目静待更新:) 枚举与模拟 一、卡片: 【问题描述】 小蓝有很多数字卡片,每张卡片上都是一个数字(0到9)。 小蓝…

html页面中的内容替换,或改变某些字的颜色

1. html页面中的内容替换,或改变某些字的颜色 前端使用innnerHtml显示返回值+innerHtml文字显示两种不同的颜色(两部分显示颜色不一样) 1.1. html字符串改变某些字的颜色 需求:要文本框的字体部分改变颜色、大小、换行等功能。在了解需求后,文本框input发现完全满足不了现需…

Linux——简单认识vim、gcc以及make/Makefile

前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 1、vim操作: 默认打开vim时,vim处于命令模式。(在其他模式中,Esc就能够返回命令模式) 常用的命令有: n gg:跳转到n行&…

C++基础(12.红黑树实现)

目录 红黑树的概念: 红黑树规则: 红黑树如何确保最长路径不超过最短路径的2倍的? 红黑树的效率: 红黑树的插入: 红黑树树插入⼀个值的大概过程: 情况1:变色 情况2:单旋变色: 情况3&…

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建:从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交:本地与集群模式全解析-CSDN博客 Spark on YARN:Spark集群模式…

Linux内核编程(二十)RTC子系统一驱动rx8010

本文目录 一、基础知识点1.什么是RTC?2. RTC方案3. 电路原理图 二、RTC芯片(RX8010)移植三、关于时间的一些命令四、应用层使用1. 使用RTC驱动2. 使用time.h库(额外知识点) 一、基础知识点 1.什么是RTC? R…

GESP4级考试语法知识(贪心算法(一))

海盗船代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; int data[21]; int main() {int n;cin>>n;for(int i0;i<n;i)cin>>data[i];sort(data,datan);int temp0,sum0;for(int i0;i<n;i){tempdata[i];if(temp>…

036 RabbitMQ消息确认 死信队列 延时队列

文章目录 生产者确认模式application.propertiesMessageController.javaMessageConfirmRallback.java 生产者回退模式application.propertiesMessageConfirmRallback.javaMessageController.java 消费者手动确认application.propertiesConsumerAckQueueListener.java 死信队列延…

Unity 插件 - Project窗口资源大小显示

Unity 插件 - Project窗口资源大小显示 &#x1f354;功能&#x1f32d;安装 &#x1f354;功能 &#x1f4a1;.显示Project Assets 和Packages下所有文件的大小&#xff08;右侧显示&#xff09; &#x1f4a1;.统计选中文件夹及其子文件夹下所有文件的大小并显示&#xff08…

Maven 中央仓库地址 mvnrepository.com

下载一些 jar 包驱动&#xff0c;不需用去官网下了&#xff0c;直接去 Maven 中央仓库&#xff0c;高效、简单 Maven 中央仓库地址 https://mvnrepository.com/open-source 我们下期见&#xff0c;拜拜&#xff01;