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

[C++]Leetcode17电话号码的字母组合

题目描述

解题思路:

这是一个深度优先遍历的题目,涉及到多路递归,下面通过画图和解析来分析这道题。

首先说到的是映射关系,那么我们就可以通过一个字符串数组来表示映射关系(字符串下标访问对应着数字映射到对应的字符串)比如我们输入的是‘2’,那么通过A[2]就可以得到对应的字符串“abc”

string A[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};

我们可以将数字对应的字符串进行分层,然后通过递归来实现深度遍历,for循环来实现广度遍历,从而得到对应的组合。最后将排列组合用vector<string>&类型容器存储起来。

这题我们就拿“246”来举例,我们用level来表示层数,将映射出的字符串划分为0 1 2层,先进行深度遍历,一层一层的将单个字符进行拼接(注意这里拼接得到的字符串str不能使用引用,因为深度遍历完一层之后,进行另外一层遍历我们是不希望受到前面遍历的影响的)比如第一次深度遍历得到“agm”,如果是使用引用传参,那么在第一次遍历之后,str就变成了“agm”在后续遍历中不方便操作。

当level达到所给数字字符串的size的时候也就是level==3时,将得到的字符串str加到vector<string> v里边这里的类型得用引用。

    void combine(string digits,int level,string str,vector<string>& v){if(level==digits.size()){v.push_back(str);return;}int num=digits[level]-'0';string s=A[num];for(int i=0;i<s.size();i++){combine(digits,level+1,str+s[i],v);}}

下面通过画图来演示一下递归流程:

完整代码如下:

class Solution {
public:string A[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//与输入的数字字符形成映射关系void combine(string digits,int level,string str,vector<string>& v){     if(level==digits.size()){v.push_back(str);return;}int num=digits[level]-'0';string s=A[num];for(int i=0;i<s.size();i++){combine(digits,level+1,str+s[i],v);}}vector<string> letterCombinations(string digits) {vector<string> v;if(digits=="")//如果是空串,直接返回空的对象v{return v;}combine(digits,0,"",v);//从第0层开始,str为空串return v;}
};

 

相关文章:

  • C++ 11 新特性
  • ESP32网络开发实例-BME280传感器数据保存到InfluxDB时序数据库
  • Flink Table API和Flink SQL处理Row类型字段案例
  • Python 日志记录器logging 百科全书 之 日志回滚
  • 图形库篇 | EasyX | 图像处理
  • React处理用户交互事件,如点击、输入框变化等,并使用事件处理函数来响应这些事件
  • Maya 2024 for Mac(3D建模软件)
  • asp.net图书管理系统
  • .net6+aspose.words导出word并转pdf
  • 前端使用webscoket
  • Rust4.2 Common Collections
  • P6入门:项目初始化5-项目支出计划Spending Plan
  • 【计算机网络】VRRP协议理论和配置
  • Scala爬虫实战:采集网易云音乐热门歌单数据
  • 探索STM32系列微控制器的特性和性能
  • 【391天】每日项目总结系列128(2018.03.03)
  • 3.7、@ResponseBody 和 @RestController
  • Fastjson的基本使用方法大全
  • Java 网络编程(2):UDP 的使用
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • python docx文档转html页面
  • SQL 难点解决:记录的引用
  • SQLServer之创建数据库快照
  • Vue.js-Day01
  • 搭建gitbook 和 访问权限认证
  • 电商搜索引擎的架构设计和性能优化
  • 后端_ThinkPHP5
  • 基于HAProxy的高性能缓存服务器nuster
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 原生JS动态加载JS、CSS文件及代码脚本
  • # 透过事物看本质的能力怎么培养?
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (原創) 未来三学期想要修的课 (日記)
  • (正则)提取页面里的img标签
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 中让 Task 支持带超时的异步等待
  • .net6Api后台+uniapp导出Excel
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET导入Excel数据
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET面试题(二)
  • :O)修改linux硬件时间
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @Mapper作用