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

Leetcode刷题详解——电话号码的字母组合

1. 题目链接:17. 电话号码的字母组合

2. 题目描述:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

img

示例 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'] 的一个数字。

3. 解法:

3.1 算法思路:

每个位置可以选择的字符与其他位置并不冲突,因此不需要标记已经出现的字符,只需要将每个数字依次填入字符串中进行递归,在回溯是撤销填入操作即可

在递归之前我们需要定义一个的字典 hash,纪录2~9各自对应的字符

3.2 递归函数流程:

  1. 递归结束条件时:当pos等于digits的长度时,将path加入到ret中返回
  2. 取出当前处理的数字digits,根据 hash取出的对应的字母列表letters
  3. 遍历字母列表letters,将当前字母加入到组合字符串path的末尾,然后递归处理下一个数字(传入pos+1,表示处理下一个数字)
  4. 递归处理结束后,将加入的字母从path的末尾删除,表示回溯
  5. 最终返回ret即可

请添加图片描述

3.3 C++算法代码:

class Solution {string hash[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; // 定义一个字符串数组,存储每个数字对应的字母组合string path; // 定义一个字符串变量,存储当前生成的字母组合vector<string> ret; // 定义一个字符串向量,存储所有可能的字母组合结果
public:vector<string> letterCombinations(string digits) { // 定义一个公共成员函数,接受一个字符串参数digits,表示输入的数字序列if(digits.size()==0) return ret; // 如果输入的数字序列为空,则直接返回空的结果向量retdfs(digits,0); // 否则,调用dfs函数进行深度优先搜索return ret; // 返回结果向量ret}void dfs(string& digits,int pos) // 定义一个私有成员函数dfs,接受两个参数:一个是输入的数字序列digits,另一个是当前处理的位置pos{if(pos==digits.size()) // 如果当前位置等于数字序列的长度{ret.push_back(path); // 将当前的字母组合添加到结果向量ret中return; // 返回}for(auto ch:hash[digits[pos]-'0']) // 遍历当前数字对应的字母组合{path.push_back(ch); // 将字母添加到path中dfs(digits,pos+1); // 递归地调用dfs函数处理下一个位置的数字path.pop_back(); // 将最后一个添加的字母从path中移除}}
};
http://www.lryc.cn/news/225780.html

相关文章:

  • dream_ready
  • 离线视频ocr识别
  • 双十一流量卡选购指南:不要只看月租,性价比高才是硬道理!
  • 时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制)
  • 华为防火墙二层透明模式下双机热备负载分担配置(两端为路由器)
  • “基于RflySim平台飞控底层算法开发”系列专题培训 (第三期)
  • Leetcode刷题详解——全排列 II
  • 音频——解析 PCM 数据
  • win10 下 ros + Qt 工程CMakeLists.txt
  • Scala中编写多线程爬虫程序并做可视化处理
  • 使用 huggingface_hub 镜像下载 大模型
  • 路径加密(替换空格),剑指offer,力扣
  • HarmonyOS开发:UI开展前的阶段总结
  • Linux安装Libreoffice
  • 如何将系统盘MBR转GPT?无损教程分享!
  • 基于element-plus定义表单配置化
  • LeetCode算法题解(贪心)|LeetCode122. 买卖股票的最佳时机 II、LeetCoed55. 跳跃游戏、LeetCode45. 跳跃游戏 II
  • 计蒜客详解合集(2)期
  • 华为防火墙vrrp+hrp双机热备主备备份(两端为交换机)
  • Angular 由一个bug说起之一:List / Grid的性能问题
  • 第12章 PyTorch图像分割代码框架-3:推理与部署
  • MYSQL---基础篇
  • 【启扬方案】启扬安卓屏一体机在医疗自助服务终端上的应用解决方案
  • 收藏!7个国内「小众」的程序员社区
  • LeetCode(4)删除有序数组中的重复项 II【数组/字符串】【中等】
  • C++ 同构字符串/ 单词规律
  • oracle 中 %TYPE %ROWTYPE
  • Pytorch实战教程(五)-计算机视觉基础
  • 51单片机PCF8591数字电压表数码管显示设计( proteus仿真+程序+设计报告+讲解视频)
  • 普华永道于进博会首发“企业数据资源会计处理一体化平台”