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

【LeetCode每日一题】——17.电话号码的字母组合

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 回溯

二【题目难度】

  • 中等

三【题目编号】

  • 17.电话号码的字母组合

四【题目描述】

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

五【题目示例】

  • 示例 1

    • 输入:digits = “23”
    • 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]
  • 示例 2

    • 输入:digits = “”
    • 输出:[]
  • 示例 3

    • 输入:digits = “2”
    • 输出:[“a”,“b”,“c”]

六【题目提示】

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

七【解题思路】

  • 但凡涉及到组合类的题目,基本都使用回溯算法解决,本题也不例外,不过是在原本的基础上添加映射关系
  • 根据题目信息可知,我们最终组合的是字母,但是输入数据为数字,所以需要简历一个数字到字母的映射
  • 其余步骤和正常的回溯过程一致
    • 设置边界条件:如果所有的数字都遍历完毕了,就完成此次计算
    • 回溯拼接某一电话号码对应的字母:和正常的回溯过程一致,不过需要先取出数字对应的字母进行回溯
  • 最后返回结果即可
  • 具体细节可以参考下面的代码

八【时间频度】

  • 时间复杂度: O ( 3 m × 4 n ) O(3^m × 4^n) O(3m×4n) m m m 3 3 3个字母对应的数字个数, n n n 4 4 4个字母对应的数字个数
  • 空间复杂度: O ( m + n ) O(m + n) O(m+n) m m m 3 3 3个字母对应的数字个数, n n n 4 4 4个字母对应的数字个数

九【代码实现】

  1. Java语言版
class Solution {// 数字和字母的映射private static final String[] phoneMap = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz",};public List<String> letterCombinations(String digits) {// 边界条件的判断if (digits == null || digits.length() == 0) {return new ArrayList<>();}// 存储最终结果List<String> res = new ArrayList<>();// 从第一个电话号码开始计算dfs(res, new StringBuffer(), digits, 0);// 返回最终结算结果return res;}// 使用回溯计算电话号码的字母组合private void dfs(List<String> res, StringBuffer temp, String digits, int index) {// 将所有电话号码遍历完毕即可返回if (index == digits.length()) {res.add(temp.toString());return;}// 回溯拼接某一电话号码对应的字母char digit = digits.charAt(index);String letters = phoneMap[digit - '0'];for (int i = 0; i < letters.length(); i++) {temp.append(letters.charAt(i));dfs(res, temp, digits, index + 1);temp.deleteCharAt(temp.length() - 1);}}}
  1. Python语言版
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",}# 存储最终结果res = list()# 存储临时结果temp = list()# 使用回溯计算电话号码的字母组合def dfs(index):# 将所有电话号码遍历完毕即可返回if index == len(digits):res.append("".join(temp))return# 回溯拼接某一电话号码对应的字母digit = digits[index]for letter in phoneMap[digit]:temp.append(letter)dfs(index + 1)temp.pop()# 从第一个电话号码开始计算dfs(0)# 返回最终结算结果return res
  1. C++语言版
class Solution {public:// 数字和字母的映射const vector<string> phoneMap = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz",};// 使用回溯计算电话号码的字母组合void dfs(vector<string>& res, string& temp, string digits, int index) {// 将所有电话号码遍历完毕即可返回if (index == digits.size()) {res.push_back(temp);return;}// 回溯拼接某一电话号码对应的字母int digit = digits[index] - '0';const string& letters = phoneMap[digit];for (char letter : letters) {temp.push_back(letter);dfs(res, temp, digits, index + 1);temp.pop_back();}}vector<string> letterCombinations(string digits) {// 存储最终结果vector<string> res;// 边界条件的判断if (digits.empty()) {return res;}// 存储临时结果string temp;// 从第一个电话号码开始计算dfs(res, temp, digits, 0);// 返回最终结算结果return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C++语言版
    在这里插入图片描述

相关文章:

【LeetCode每日一题】——17.电话号码的字母组合

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 中等 三【题目编号】 17.电话号码的字母组合 四【题目描述】 给定一个…...

Git管理远程仓库

添加远程仓库 要新增远程&#xff0c;请在终端上存储存储库的目录中使用 git remote add 命令。 git remote add 命令采用两个参数&#xff1a; 远程名称&#xff08;例如 origin&#xff09;远程 URL&#xff08;例如 https://github.com/OWNER/REPOSITORY.git&#xff09;…...

在 /var/cache/apt/archives/ 上没有足够的可用空间的解决方法

问题 apt-get upgrade 更新软件包时&#xff0c;提示没有足够的空间。 分析 一般来说&#xff0c;除非下载的文件过于大&#xff0c;整个服务器的内存都不够用&#xff0c;否则可以改变默认的下载路径进行下载。 解决方法 找一个空间足够的目录&#xff0c;新建一个单独的…...

FastAdmin Apache下设置伪静态

FastAdmin Apache下设置伪静态 一、引言 FastAdmin 是一个基于ThinkPHP和Bootstrap框架开发的快速后台开发框架&#xff0c;它以其简洁、高效、易于扩展的特点&#xff0c;广受开发者的喜爱。在部署FastAdmin项目时&#xff0c;为了提高访问速度和用户体验&#xff0c;我们通…...

MPI程序实例:自适应数值积分(主从模式)

目录 一、主从模式的自适应梯形公式 二、串行程序 三、基于非阻塞通信的并行程序 四、基于散发/收集通信的并行程序 上一节我们介绍了采用梯形公式结合自适应局部区间加密,计算一个函数在给定区间上的定积分达到指定精度。 MPI程序实例:自适应数值积分-CSDN博客…...

蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)

一、什么是IIC&#xff1f;24C02存储器有什么用&#xff1f; IIC &#xff08;IIC 是半双工通信总线。半双工意味着数据在某一时刻只能沿一个方向传输&#xff0c;即发送数据的时候不能接收数据&#xff0c;接收数据的时候不能发送数据&#xff09;即集成电路总线&#xff08;…...

【重学 MySQL】六十二、非空约束的使用

【重学 MySQL】六十二、非空约束的使用 定义目的关键字特点作用创建非空约束删除非空约束注意事项 在MySQL中&#xff0c;非空约束&#xff08;NOT NULL Constraint&#xff09;是一种用于确保表中某列不允许为空值的数据库约束。 定义 非空约束&#xff08;NOT NULL Constra…...

Python获取json返回的字符串获取方法大全

1、使用 json.loads() 解析JSON字符串 import jsonjson_string {"name": "Alice", "age": 25, "city": "Beijing"} data json.loads(json_string)# 获取字符串值 name data[name] print("Name:", name) # 输…...

FreeBSD14.1 rm命令的疑惑

在/tmp目录发现有很多目录和文件&#xff0c;准备把它们都删除&#xff0c;结果发现都删不掉 这些文件目录如图&#xff1a; /tmp % ls -la total 9143 drwxrwxrwt 421 root wheel 486 10月 8 11:58 . drwxr-xr-x 23 root wheel 32 10月 8 10:06 .. drwx----…...

LSTM模型变种

LSTM模型变种 一、GRU 1.什么是GRU GRU&#xff08;Gated Recurrent Unit&#xff09;是一种循环神经网络&#xff08;RNN&#xff09;的变体&#xff0c;它被设计用来解决传统RNN在处理长序列时可能遇到的梯度消失或梯度爆炸问题。GRU通过引入门控机制来控制信息的流动&…...

基于comsol模拟微穿孔板和卷曲通道的混合吸声器低频吸声

研究背景&#xff1a; 具有深亚波长厚度&#xff08;5cm&#xff09;的吸收器对低频声音&#xff08;<500Hz&#xff09;的衰减在噪声控制工程中引起了极大的兴趣。然而&#xff0c;由于低频声音的强穿透性和普通材料的弱固有分散性&#xff0c;这是一项具有挑战性的任务。…...

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步&#xff08;Synchronous&#xff09;2. 异步&#xff08;Asynchronous&#xff09;3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用&#xff1a; 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…...

【Java 循环控制实例详解【While do... while】】

Java 循环控制详解【While & do… while】 在 Java 中&#xff0c;循环控制是程序设计中非常重要的部分&#xff0c;主要包括 while 循环和 do...while 循环。本文将详细介绍这两种循环的基本语法、执行流程及相关示例。 1. while 循环控制 基本语法 循环变量初始化; wh…...

10.2 Linux_进程_进程相关函数

创建子进程 函数声明如下&#xff1a; pid_t fork(void); 返回值&#xff1a;失败返回-1&#xff0c;成功返回两次&#xff0c;子进程获得0(系统分配)&#xff0c;父进程获得子进程的pid 注意&#xff1a;fork创建子进程&#xff0c;实际上就是将父进程复制一遍作为子进程&…...

栈与队列面试题(Java数据结构)

前言&#xff1a; 这里举两个典型的例子&#xff0c;实际上该类型的面试题是不确定的&#xff01; 用栈实现队列&#xff1a; 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;双栈 思路 将一个栈当作输入栈&#xff0c;用于压入 push 传入的数…...

手撕数据结构 —— 顺序表(C语言讲解)

目录 1.顺序表简介 什么是顺序表 顺序表的分类 2.顺序表的实现 SeqList.h中接口总览 具体实现 顺序表的定义 顺序表的初始化 顺序表的销毁 打印顺序表 ​编辑 检查顺序表的容量 尾插 尾删 ​编辑 头插 头删 查找 在pos位置插入元素 删除pos位置的值 ​…...

女友学习前端第二天-笔记

2024/10/8笔记 表格 table 表格 tr 行 td 单元格内容 th 表头 第一行相当于h1 alignleft /center /right 对齐方式 应在table边上 比如<table alignleft> border 代表边框 也应在table边上 比如<table alignleft border"1"> cellpadding 单元外框与…...

电脑手机下载小米xiaomi redmi刷机包太慢 解决办法

文章目录 修改前下载速度修改后下载速度修改方法&#xff08;修改host&#xff09; 修改前下载速度 一开始笔者以为是迅雷没开会员的问题&#xff0c;在淘宝上买了一个临时会员后下载速度依然最高才100KB/s 修改后下载速度 修改方法&#xff08;修改host&#xff09; host文…...

Python中的策略模式:解锁编程的新维度

引言 策略模式是一种行为型设计模式&#xff0c;允许算法独立于使用它的客户端而变化。这使得我们可以根据不同的情况选择不同的算法或策略来解决问题&#xff0c;从而增强系统的灵活性。在日常开发中&#xff0c;策略模式常用于处理多种算法或行为之间的切换&#xff0c;比如…...

ara::core::Future::then()的概念和使用方法

1. 概念 在ara::core::Future的上下文中&#xff0c;then()是一种用于处理异步操作结果的机制。一个Future代表一个尚未完成的异步计算&#xff0c;它最终会产生一个结果或者一个错误。then()方法允许你在Future完成时注册一个回调函数&#xff08;或者说后续操作&#xff09;…...

4款GitHub热门浏览器自动化工具横向评测:哪款最适合你的开发需求?

4款GitHub热门浏览器自动化工具横向评测&#xff1a;哪款最适合你的开发需求&#xff1f; 在数字化转型浪潮中&#xff0c;浏览器自动化已成为提升开发效率的关键技术。无论是日常的数据采集、自动化测试&#xff0c;还是复杂的AI代理交互&#xff0c;选择一款合适的工具往往能…...

隐私保护×效率提升:开源OCR工具如何重构3大行业文本处理流程

隐私保护效率提升&#xff1a;开源OCR工具如何重构3大行业文本处理流程 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成二维码。内置多…...

深圳嵌入式技术产业创新与应用全景

1. 深圳嵌入式科技产业全景扫描 深圳作为中国科技创新高地&#xff0c;已形成全球最完整的嵌入式技术产业链。从消费电子到工业控制&#xff0c;从汽车电子到医疗设备&#xff0c;嵌入式系统正以"润物细无声"的方式重塑各个行业。这座城市聚集了超过2000家嵌入式相关…...

智能化时代的数据集成技术革新

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

RWKV7-1.5B-G1A多模态应用初探:从文本到简单图表描述生成

RWKV7-1.5B-G1A多模态应用初探&#xff1a;从文本到简单图表描述生成 1. 开篇&#xff1a;当语言模型遇见数据可视化 最近在测试RWKV7-1.5B-G1A模型时&#xff0c;我发现一个有趣的现象——这个原本设计用于文本处理的模型&#xff0c;居然能通过巧妙的Prompt设计&#xff0c…...

8款实用AI论文生成工具(包括爱毕业aibiye)及新手详细指南

在学术研究领域&#xff0c;AI技术的应用显著提升了论文写作的效率与质量。以下推荐8款功能强大的智能工具&#xff0c;涵盖文献解析、内容生成、文本优化等关键环节&#xff0c;助力研究者高效完成从资料收集到论文润色的全流程工作。这些创新解决方案能够有效简化研究过程&am…...

Phi-4-mini-reasoning快速部署:Conda环境+PyTorch2.8适配避坑指南

Phi-4-mini-reasoning快速部署&#xff1a;Conda环境PyTorch2.8适配避坑指南 1. 项目概述 Phi-4-mini-reasoning是微软推出的3.8B参数轻量级开源模型&#xff0c;专为数学推理、逻辑推导和多步解题等强逻辑任务设计。这个模型主打"小参数、强推理、长上下文、低延迟&quo…...

金士顿SA400S37固态硬盘掉盘自救指南:手把手教你用phison_flash_id修复固件(附工具包)

金士顿SA400S37固态硬盘掉盘故障深度修复手册 固态硬盘突然"消失"在系统中&#xff1f;金士顿SA400S37系列用户可能正遭遇典型的固件故障。这种问题通常表现为硬盘在BIOS中时隐时现、系统仅识别为20MB容量或直接无法初始化。不同于物理损坏&#xff0c;这类固件级故障…...

热点 | Harness 架构深度解析:AI智能体编排框架的核心原理

热点 | Harness 架构深度解析:AI智能体编排框架的核心原理 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 本文深度解析 Claude Code 背后的核心架构 Harness,揭示为何"Harness 比模型更重要"成为 2026 年 AI …...

YOLOv12性能优化 | 注意力融合 | 实战解析CBAM模块的集成与调优

1. CBAM注意力机制的核心原理与实战价值 第一次接触CBAM模块时&#xff0c;我被它简洁高效的设计惊艳到了。这个由通道注意力和空间注意力组成的双剑客&#xff0c;能在不显著增加计算量的情况下&#xff0c;让模型学会"该看哪里"。想象一下教小朋友看图说话&#xf…...