每日一题之电话号码的字母组合

给定一个仅包含数字 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'] 的一个数字。
class Solution {
public:vector<string> letterCombinations(string digits) {vector<string> coms;if(digits.empty()){return coms;}unordered_map<char,string> phoneMap{{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"mno"},{'7',"pqrs"},{'8',"tuv"},{'9',"wxyz"}};string com;backtrack(coms,phoneMap,digits,0,com);return coms;}void backtrack(vector<string>& coms,const unordered_map<char,string>& phoneMap,const string& digits,int index,string& com){if(index==digits.size()){coms.push_back(com);}else{char digit=digits[index];const string& letters=phoneMap.at(digit);for(const char& letter:letters){com.push_back(letter);backtrack(coms,phoneMap,digits,index+1,com);com.pop_back();}}}
};

整体来说这道题的思路是枚举,只不过用回溯法去降低时间复杂度。用哈希表存储所有数字字符对应的字母的可能性,然后遍历字符。比如给出的字符为“23”,那么我们先去找到2对应的字母为abc,找到之后先对a进行处理,递归进入的是3对应的字符“def”,但是递归这里有点难想,进入递归之后相当于进入一次嵌套循环(我是这里理解的),然后遍历def,d完成遍历后,index等于digits的长度,coms则添加第一个结果字符ad,然后此时回到上次递归状态,注意此时是第3次使用backtrack,因此我们回到第二次调用,即遍历def的时候,先释放掉com,再继续遍历e,直到遍历完成。同样的遍历完def之后,回到上一层,继续遍历a的下一个,也就是b,直到全部情况遍历完成。其实递归的作用就有点类似于嵌套循环的过程,但是这里的index没有重置,因为递归的情况下,它退回上一层状态,相当于自动重置。

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

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

相关文章

2025选题|基于Hadoop的物品租赁系统的设计与实现

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

星海智算:用户如何使用公共存储

公共存储是平台下载好的一些模型、数据集&#xff0c;只读方便拷贝或者直接引入。 公共存储会由官方定时更新,更新内容来源于用户反馈,会将反馈的模型下载到公共存储,供用户拷贝到实例本地使用。 01 下载模型 直接从公共存储路径 /mnt/pub_data/ 下载所需模型。 02 复制…

五周年,继续破浪前行

五周年&#xff0c;TapData 再一次带着自己的“乘风破浪”大队&#xff0c;在一个阳光明媚的日子里&#xff0c;把生日过在了海上。 头顶日升日落&#xff0c;这条属于全体 Tap-pers 的航船&#xff0c;再次校准航向&#xff0c;在船长的带领下&#xff0c;驶向下一个晴好的明…

Mybatis-14.XML映射文件

一.XML映射文件 除了使用注解的方式完成mybatis基础的增删改查操作以外&#xff0c;还可以使用基于XML文件配置SQL语句。 二.配置XML映射文件 首先在resources中新建文件夹com/域名/mapper用来和java源代码中的包名保持一致&#xff0c;这是同包。 然后在mapper文件夹中新建x…

详解Pectra升级:如何影响以太坊价值及利益相关者

Pectra很可能是最后几个会直接影响用户和ETH持有者的升级之一。 原文&#xff1a;Galaxy Research&#xff1b;编译&#xff1a;Golem&#xff1b;编辑&#xff1a;郝方舟 出品 | Odaily星球日报&#xff08;ID&#xff1a;o-daily&#xff09; 编者按&#xff1a;以太坊 Pectr…

「C/C++」C++17 之 std::variant 安全的联合体(变体)

#1024程序员节&#xff5c;征文# ✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计…

windows 训练yolov8官方数据集

第一步&#xff1a;安装Anaconda3-2024.06-1-Windows-x86_64.exe 下载地址&#xff1a;https://repo.anaconda.com/archive/ 第二步&#xff1a;创建环境 打开Anaconda Prompt 输入 conda info -e 打印&#xff1a; 已经安装了一些环境&#xff0c;然后我们创建新的环境&a…

Linux(kali)换源操作

apt换源 &#xff08;切换到国内源&#xff09; 阿里云Kali镜像源 deb http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free non-free-firmware contrib 1.切换为root用…

springboot095学生宿舍信息的系统--论文pf(论文+源码)_kaic

学生宿舍信息管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了学生宿舍信息管理系统的开发全过程。通过分析学生宿舍信息管理系统管理的不足&#xff0c;创建了一个计算机管理学生宿舍信息管理系统的方…

lstio微服务治理-概述

一、Service Mesh介绍 Service Mesh 的中文译为&#xff1a;服务网格&#xff0c;是一个用于处理服务和服务之间通信的基础设施层。它负责为构建复杂的云原生应用传递可靠的网络请求&#xff0c;并为服务通信实现了微服务所需要的基本组件功能&#xff0c;如&#xff1a;服务发…

哈尔滨银行难以摆脱低估值,不良贷款突破100亿元,何时回A?

撰稿 | 芋圆 来源 | 贝多财经 在经济缓慢恢复的步调中&#xff0c;多数理财者倾向于选择更为保守的资产分配策略&#xff0c;但部分银行在竞争加剧&#xff0c;净息差持续收窄的压力下&#xff0c;却将业务转型的矛头对准了风险更高的金融投资领域&#xff0c;哈尔滨银行就是…

基础知识-因果分析-daythree-独立性检验

我们经常需要观察一个事件的发生对另一个事件的发生是否有影响。有时候&#xff0c;我们可以观察到一个事件的发生对另一个事件发生的概率有影响。比如&#xff0c;你驾车超速这个事件的发生会增加你发生交通事故的概率。但是&#xff0c;有时候我们也可以观察到&#xff0c;一…

SpringMVC6-SpringMVC的视图

目录 ThymeleafView 转发视图 重定向视图 视图控制器view-controller SpringMVC中的视图是View接口&#xff0c;视图的作用&#xff1a;渲染数据&#xff0c;将模型Model中的数据展示给用户 SpringMVC视图的种类很多&#xff0c;默认有转发视图InternalResourceView 和重定…

【再谈设计模式】单例模式~唯一性的守护者

一、引言 在软件工程中&#xff0c;软件开发&#xff0c;设计模式是提高代码复用性和可维护性的有效工具。单例模式&#xff08;Singleton Pattern&#xff09;作为一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供对该实例的全局访问。这一模式在…

Spring Boot 实现文件上传下载功能

文章目录 一、原理分析1.1 请求类型1.2 服务器解析 二、功能实现2.1 创建项目并导入依赖2.2 文件上传功能实现2.2.1 文件上传 Service2.2.2 文件上传 Controller 2.3 文件下载功能实现2.3.1 文件下载 Service2.3.2 文件下载 Controller 2.4 文件上传前端代码(可选)2.4.1 上传文…

HarmonyOS Next API12最新版 端云一体化开发-云函数篇

一、新建一个端云一体化项目 见文章&#xff1a; HarmonyOS NEXT API12最新版 端云一体化开发-创建端云一体化项目流程_鸿蒙appapi-CSDN博客 二、官方文档 使用限制-云函数 - 华为HarmonyOS开发者 (huawei.com) Cloud Foundation Kit简介-Cloud Foundation Kit&#xff0…

深度学习:SGD的缺点

首先看下述函数&#xff1a; 最小值为x0&#xff0c;y0处 先了解下它的梯度特征。了理解其梯度特征&#xff0c;我们需要计算其梯度向量。 梯度向量 ∇f 是函数 f 在每个变量方向上的偏导数组成的向量。具体来说&#xff1a; ∇f(∂f/∂x,∂f∂/y) 首先&#xff0c;我们计算 f …

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第六十七章 Trusted Firmware-A 移植

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

Qt | windows视频播放器小项目

点击上方"蓝字"关注我们 01、前言 >>> Windows平台如果播放不了视频,记得下载编解码工具:https://www.mediaplayercodecpack.com/#google_vignette media.player.codec.pack.v4.6.0.setup.exe 下载后双击安装。 02、videowidget.pro >>> (.pro…

Android Activity SingleTop启动模式使用场景

通知栏 当用户点击通知栏中的通知时,可以使用单顶启动模式来打开对应的活动,并确保只有一个实例存在。 简单集成极光推送 创建应用 获取appkey参数 切换到极光工作台 极光sdk集成 Project 根目录的主 gradle 配置 Module 的 gradle 配置 Jpush依赖配置 配置推送必须…