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

leetcode17. 电话号码的字母组合,dfs深度优先搜索

leetcode17. 电话号码的字母组合

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

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

示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]

算法思想

算法步骤

1.初始化:创建一个结果列表res,用于存储所有可能的字母组合;path用于存储当前的字母组合;a是一个数组,存储每个数字键对应的所有可能的字母。

2.递归函数dfs:这是一个深度优先搜索(DFS)的递归函数,用于生成所有可能的字母组合。

参数: n:输入数字字符串的长度。 t:当前处理到的数字键的索引。 digits:输入的数字字符串。
递归终止条件:当t等于n时,说明已经处理完所有的数字键,将当前的path添加到结果列表res中。 递归逻辑:
计算当前数字键对应的字母数组a[digits[t]-‘2’]的大小。 遍历这个字母数组,对于每个字母:
如果是第一个数字键(t==0),则将字母赋值给path;否则,将字母追加到path的末尾。 递归调用dfs,将t加1,继续处理下一个数字键。
回溯,移除path末尾的字母,撤销上一步的操作。

3.主函数letterCombinations:这是对外提供的接口函数,接收一个数字字符串digits作为输入,调用dfs函数,并返回所有可能的字母组合。

算法流程

dfs
当前索引是否等于长度?
dfs
将当前路径加入结果集
遍历当前数字对应的字符集
根据当前索引更新路径
递归调用dfs
回溯移除路径最后一个字符
letterCombinations开始
digits是否为空?
返回空结果
获取digits长度
调用dfs
返回结果集
letterCombinations结束

具体代码

class Solution {
public:vector<string> res;string path;string a[8]={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void dfs(int n,int t,string digits)  //1 0{if(t==n) {res.push_back(path);return ;}int size=a[digits[t]-'2'].size();for(int i=0;i<size;i++){path+=a[digits[t]-'2'][i];dfs(n,t+1,digits);path.erase(path.end()-1);}}vector<string> letterCombinations(string digits) {if(digits=="") return res;int n=digits.size();dfs(n,0,digits);return res;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JC/T 2436-2018 木塑家具板材检测
  • Java 中的 ArrayList 和 LinkedList 在性能上有什么不同?
  • Linux安装Java(JKD)
  • 边缘计算×AI:绘制未来实时智能的宏伟蓝图
  • 智能化的Facebook未来:AI如何重塑社交网络的面貌?
  • Docker-数据卷指令
  • 使用ThreadStatic属性提供线程安全的数据访问
  • 算法学习day30
  • 一天一个Arrays小知识——Arrays.asList()
  • Java在无人驾驶方向的就业方向
  • QT百度智能云API鉴权,查询 文心一言 服务调用情况
  • PXE服务器自助部署
  • Adobe ColdFusion反序列化漏洞(cve-2017-3066)
  • 【Day04】0基础微信小程序入门-学习笔记
  • SQL报错注入之updatexml
  • python3.6+scrapy+mysql 爬虫实战
  • Bootstrap JS插件Alert源码分析
  • CODING 缺陷管理功能正式开始公测
  • conda常用的命令
  • MySQL-事务管理(基础)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Spark学习笔记之相关记录
  • Yeoman_Bower_Grunt
  • 初探 Vue 生命周期和钩子函数
  • 解析带emoji和链接的聊天系统消息
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 突破自己的技术思维
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 学习JavaScript数据结构与算法 — 树
  • 用element的upload组件实现多图片上传和压缩
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • MyCAT水平分库
  • ​iOS实时查看App运行日志
  • (+4)2.2UML建模图
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linq学习笔记
  • (转)视频码率,帧率和分辨率的联系与区别
  • .Mobi域名介绍
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Remoting学习笔记(三)信道
  • .NET 反射 Reflect
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .Net面试题4
  • .NET上SQLite的连接
  • @PreAuthorize注解