LeetCode 算法:电话号码的字母组合 c++

原题链接🔗:电话号码的字母组合
难度:中等⭐️⭐️

题目

给定一个仅包含数字 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’] 的一个数字。

题解

  1. 解题思路

LeetCode 上的 “电话号码的字母组合” 问题要求你根据一个数字电话号码,生成所有的可能的字母组合。在这个问题中,每个数字键对应一组字母,例如:

  • 2 对应 ‘a’, ‘b’, ‘c’
  • 3 对应 ‘d’, ‘e’, ‘f’

解题思路如下:

  1. 理解问题:首先,要清楚每个数字键对应的字母组合,以及电话号码可能的组合方式。

  2. 回溯法:这是一个典型的回溯问题,我们可以使用回溯法来解决。回溯法是一种通过递归来搜索所有可能解的方法。

  3. 构建映射:创建一个映射,将每个数字键映射到它对应的字母组合。

  4. 递归生成组合:使用递归函数,每次递归调用时,尝试当前数字键的所有可能字母,并将其添加到当前的组合中。

  5. 回溯:在递归过程中,如果当前组合的长度等于电话号码的长度,说明找到了一个有效的组合,将其添加到结果中。然后回溯,移除当前添加的字母,尝试下一个字母。

  6. 优化:在生成组合的过程中,如果当前数字键没有对应的字母,直接回溯到上一个数字键。

下面是这个问题的一般性解题步骤:

  • 定义一个映射 digitToChar,将每个数字映射到对应的字母字符串。
  • 定义一个递归函数 backtrack,接收当前的组合 current,当前处理的数字索引 index,以及电话号码 digits 作为参数。
  • backtrack 函数中,如果 index 等于电话号码的长度,将当前的组合 current 添加到结果 result 中。
  • 对于当前索引 index,获取当前数字对应的所有字母,然后对每个字母进行递归调用 backtrack,并将字母添加到当前组合 current 中。
  • 在递归调用后,需要回溯,即从 current 中移除最后添加的字母。
  1. c++ demo
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;class Solution {
public:vector<string> letterCombinations(string digits) {vector<string> combinations;if (digits.empty()) {return combinations;}unordered_map<char, string> phoneMap{{'2', "abc"},{'3', "def"},{'4', "ghi"},{'5', "jkl"},{'6', "mno"},{'7', "pqrs"},{'8', "tuv"},{'9', "wxyz"}};string combination;backtrack(combinations, phoneMap, digits, 0, combination);return combinations;}void backtrack(vector<string>& combinations, const unordered_map<char, string>& phoneMap, const string& digits, int index, string& combination) {if (index == digits.length()) {combinations.push_back(combination);}else {char digit = digits[index];const string& letters = phoneMap.at(digit);for (const char& letter : letters) {combination.push_back(letter);backtrack(combinations, phoneMap, digits, index + 1, combination);combination.pop_back();}}}
};int main() {Solution solution;std::string digits = "23";std::vector<std::string> combinations = solution.letterCombinations(digits);for (const std::string& combination : combinations) {std::cout << combination << std::endl;}return 0;
}
  1. 代码仓库地址:letterCombinations

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

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

相关文章

SpringCloud教程 | 第九篇: 使用API Gateway

1、参考资料 SpringCloud基础篇-10-服务网关-Gateway_springcloud gateway-CSDN博客 2、先学习路由&#xff0c;参考了5.1 2.1、建了一个cloudGatewayDemo&#xff0c;这是用来配置网关的工程&#xff0c;配置如下&#xff1a; http://localhost:18080/aaa/name 该接口代码如…

git clone命令, 克隆远程仓库

这个应该是最简单的命令&#xff0c;当别人扔给你一个*****.git链接&#xff0c;你要知道怎么用&#xff0c;但是还需要注意以下几点&#xff1a; 1. 你在该网站上是否有账号 2. 你在该网站上的账号是否是该项目的成员&#xff0c;如果不是&#xff0c;那可能clone不了 3. 本机…

WSL-Ubuntu20.04部署环境配置

1.更换Ubuntu软件仓库镜像源 为了在WSL上使用TensorRT进行推理加速&#xff0c;需要安装以下环境&#xff0c;下面将按以下顺序分别介绍安装、验证以及删除环境&#xff1a; #1.C环境配置 gcc、gdb、g #2.gpu环境 cuda、cudnn #3.Cmake环境 CMake #4.OpenCV环境 OpenCV #5.Ten…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Zoom视频会议软件使用

Zoom是一款广受欢迎的视频会议软件&#xff0c;使用它可以轻松地进行远程会议、在线培训和团队协作等。要充分利用Zoom软件的功能&#xff0c;以下是详细具体的使用方法和步骤&#xff1a; 下载安装 下载&#xff1a;访问Zoom官方网站&#xff0c;根据使用的操作系统下载相应的…

ttkefu在线客服系统 机器人+人工客服 全渠道接入客户咨询

ttkefu在线客服系统是一种集成了机器人客服与人工客服&#xff0c;并支持全渠道接入客户咨询的综合解决方案。这种系统能够显著提升客户服务效率&#xff0c;优化客户体验&#xff0c;同时帮助企业降低运营成本 1. 智能机器人客服 自动回复&#xff1a;机器人客服能够自…

自制连点器

B站使用教程&#xff1a;https://www.bilibili.com/video/BV1SR85e4EKw/?vd_source47eba1800d831e86d4778a128740fe73 下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Spv_yVPFB3zoS__VL-nhaQ?pwdyxo1 提取码&#xff1a;yxo1

20.x86游戏实战-远线程注入的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

Spring AI 应用开发中设置访问 Ollama 的超时时间

使用 Spring AI 开发 AI 应用时&#xff0c;Ollama 通常在本地开发和测试时使用&#xff0c;用来在本地运行大模型。由于本地开发机器的资源限制&#xff0c;当使用 Ollama 运行较大的模型时&#xff0c;大模型给出响应的时间会比较长。Spring AI 提供的 OllamaChatModel 与 Ol…

在Mac上免费恢复误删除的Word文档

Microsoft Word for Mac是一个有用的文字处理应用程序&#xff0c;它与Microsoft Office套件捆绑在一起。该软件的稳定版本包括 Word 2019、2016、2011 等。 Word for Mac 与 Apple Pages 兼容;这允许在不同的操作系统版本中使用Word文档&#xff0c;而不会遇到任何麻烦。 与…

【数据结构】非线性表----树详解

树是一种非线性结构&#xff0c;它是由**n&#xff08;n>0&#xff09;**个有限结点组成一个具有层次关系的集合。具有层次关系则说明它的结构不再是线性表那样一对一&#xff0c;而是一对多的关系&#xff1b;随着层数的增加&#xff0c;每一层的元素个数也在不断变化&…

逆向案例二十三——请求头参数加密,某区块链交易逆向

网址&#xff1a;aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo 抓包分析&#xff0c;发现请求头有X-Apikey参数加密&#xff0c;其他表单和返回内容没有加密。 直接搜索关键字&#xff0c;X-Apikey&#xff0c;找到疑似加密位置&#xff0c;注意这里…

零基础学习Python(三)

1. 多重继承 一个子类可以继承多个父类&#xff0c;这与一些编程语言的规则不通。 如果多个父类中有同名的变量和方法&#xff0c;子类访问的顺序是按照继承时小括号里书写的顺序进行访问的。 可以用issubclass(B, A)方法判断B是否为A的子类。 2. 绑定 类中的方法通过参数s…

《TF2.x强化学习手册》P59-P65-SARSA-Q-learning

文章目录 实现SARSA算法和对应的强化学习智能体前期准备实现步骤工作原理初始化算法流程 构建基于Q学习的智能体前期准备实现步骤工作原理SARSA 算法的收敛性&#xff1a;SARSA 适合在线学习和真实系统&#xff1a;Q 学习算法的适用性&#xff1a; 实现SARSA算法和对应的强化学…

HDC使用常见命令

HDC&#xff08;HarmonyOS Device Connector&#xff09;是为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在windows/linux/mac系统上与真实设备进行交互。 使用HDC前&#xff0c;需要配置相关环境变量&#xff1a; 在此电脑 > 属性 > 高级系统设置 &g…

Git常用命令以及使用IDEA集成Gitee

目录 一、设置用户签名 二、初始化本地库 三、查看本地库状态 四、添加文件到暂存区 五、提交本地库 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、创建分支 9.3、切换分支 9.4、合并分支 十、团队协作 十一、Idea集成Git 11.1、配…

Github 2024-07-15 开源项目周报 Top15

根据Github Trendings的统计,本周(2024-07-15统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目4JavaScript项目3TypeScript项目2Go项目1Solidity项目1Java项目1Rust项目1免费编程学习平台:freeCodeCamp.org 创建…

3.1-RNN存在的问题以及LSTM的结构

文章目录 1 RNN存在的问题1.1梯度消失问题1.2梯度爆炸问题1.3梯度爆炸的对策 2梯度消失的对策——LSTM2.1输出门2.2遗忘门2.3输入门2.4总结2.5 LSTM梯度的流动 1 RNN存在的问题 RNN存在梯度消失和梯度爆炸的问题。 书上以下图的这句话为例&#xff0c;进行说明&#xff1b;为了…

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言&#xff08;lookahead&#xff09;和后瞻断言&#xff08;lookbehind&#xff09;相信用过的小伙伴就知道它的威力了&#xff0c;在一些特定的需求场景下&#xff0c;可以做到四两拨千斤的作用&#xff0c;今天让我们来盘点一下在 JavaScript 正则表达…

昇思25天学习打卡营第14天|munger85

基于MindNLPMusicGen生成自己的个性化音乐 这个所谓的个性化的音乐就是指你输入一段文字它会根据这个文字输出一段音乐这个音乐是贴近于那段文字的所以叫做文生成音乐&#xff0c; 如果网络正常的话就可以直接从下载这个模型。 那么音乐生成的有两种方式呢有两种方式&#xff…