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,一经查实,立即删除!

相关文章

剑指offer JZ33 二叉搜索树的后序遍历序列

描述 剑指offer JZ33 二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围: 节点数量 0≤n≤1000 ,节点上…

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发生地址绑定…

高频 SQL 50 题(基础版)连接部分

1、使用唯一标识码替换员工ID # Write your MySQL query statement below SELECT b.unique_id, a.name FROM Employees as a LEFT JOIN EmployeeUNI as b ON a.id b.id;2、产品销售分析 I # Write your MySQL query statement below SELECTp.product_name, s.year, s.price …

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

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

CentOS AppStream 8 手动更新 yum源

由于CentOS 8的官方支持已在2021年12月31日结束,官方镜像中的CentOS 8包已被移除。因此,如果您仍然需要运行CentOS 8并更新其yum源,您可以考虑使用以下步骤来配置一个可用的yum源,例如阿里云的镜像源。 https://mirrors.aliyun.co…

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

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

C 语言标准库 - <errno.h>

目录 1.errno 变量 2.宏 1.errno 变量 errno.h 声明了一个 int 类型的 errno 变量&#xff0c;用来存储错误码&#xff08;正整数&#xff09;。 如果这个变量有非零值&#xff0c;表示已经执行的程序发生了错误。 #include <errno.h> #include <stdio.h> #in…

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

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

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

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

【LeetCode】【算法】538. 把二叉搜索树转换为累加树

LeetCode 538. 把二叉搜索树转换为累加树 题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…

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

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

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

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

Kafka经典面试题

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

【Vue】Vue3.0(二十四)Vue3.0中$refs 、$parent 的概念和使用场景

文章目录 一、 r e f s 和 refs和 refs和parent的概念及使用场景1. $refs概念及使用场景2. $parent概念及使用场景 二、代码解释Father.vueChild1.vueChild2.vue 三、新的例子CounterParent.vueCounterIncrement.vueCounterDecrement.vue 一、 r e f s 和 refs和 refs和parent的…

HTB:Photobomb[WriteUP]

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

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

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

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

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

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

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

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

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