在做题中学习(31):电话号码的字母组合(全排列)

17. 电话号码的字母组合 - 力扣(LeetCode)

思路:既然要排列组合,就得先根据数字字符取出来

所以先定义一个string类的数组通过下标取到每个数字对应的映射。

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

接下来便是:想到如果可以用递归,把每次组合的值返回(追加)到一个vector<string>对象中,且能回到上一个位置继续,就能将全排列搞定。

因为通过di下标访问数组,所以当di==digits.size()时,得到字符串,尾插到v中,返回上一级。

可以通过for循环访问每一个数字映射的全部字符。

class Solution 
{
public:string _numsTostr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};void Combine(const string& digits,int di,string cbstr,vector<string>& v){if(di==digits.size()){v.push_back(cbstr);return;}int num = digits[di]-'0';string str = _numsTostr[num];for(int i=0;i<str.size();i++){Combine(digits,di+1,cbstr+str[i],v);}}vector<string> letterCombinations(string digits) {vector<string> v;if(digits.empty()){return v;}Combine(digits,0,"",v);return v;}
};

注意:1.main函数加个if是因为防止用户输入为空,进到Combine里还会通过if尾插。

           2.其中的参数cbstr是保存每一次最后的字符串,把他尾插到v里,而递归往下走时的每一层字符由str加到cbstr里。

           3.这里传的参数v,加了引用,目的是直接加到外面要返回的v里。


附上一部分自己画的递归展开图,方便理解。

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

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

相关文章

12.11 C++ 作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

如何在Word中简洁地插入代码

如何在Word中简洁地插入代码 背景&#xff1a; ​ 最近在一写一些论文或者报告的时候&#xff0c;需要将源代码放在论文的最后&#xff0c;有一个很头疼的问题&#xff0c;如果直接把代码从编辑器复制到word中&#xff0c;就变成了下面这个样子&#xff1a; 这有点丑陋啊&…

jemeter,同一线程组内,调用cookie实现接口关联

取cookie方式参考上一篇&#xff1a;jemeter&#xff0c;取“临时重定向的登录接口”响应头中的cookie-CSDN博客 元件结构 登录后要执行的接口为“api/get_event_list/”&#xff0c;在该HTTP请求下创建HTTP信息头管理器&#xff0c;配置如下&#xff1a; 执行测试后&#xff0…

Elasticsearch,Kibana集成,x-pack鉴权配置

Elasticsearch,Kibana集成 Java8环境部署[CentOS7] cd /usr/local/src wget https://repo.huaweicloud.com/java/jdk/8u201-b09/jdk-8u201-linux-x64.tar.gztar -xzvf jdk-8u201-linux-x64.tar.gz -C /usr/local#配置环境变量 vim /etc/profile #文末添加 export JAVA_HOME/us…

轻空间助力中国高校实现场馆多功能一体化

中国高校在迎接体育、文艺、学术等多元化需求的同时&#xff0c;面临着场馆设施不足、建设成本高的难题。然而&#xff0c;随着轻空间&#xff08;江苏&#xff09;膜科技有限公司的崭新解决方案的引入&#xff0c;中国高校如苏州大学等正迎来一场场馆多功能一体化的革命。 创新…

某信服 EDR 白程序DLL劫持

本文用到的白程序回复公众号20231211进行获取。 嗯… 记得去年HW的时候某信服给我装的EDR一直没卸载&#xff0c;不是不想卸载&#xff0c;是因为卸载要密码&#xff0c;所以就摆烂了。。。。 找到EDR这个目录&#xff0c;然后把目录复制到虚拟机中&#xff0c;然后一个一个e…

C++ Qt开发:PushButton按钮组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍QPushButton按钮组件的常用方法及灵活运用。 …

为什么推荐将静态资源放到CDN上?

一、什么是静态资源 说到静态资源&#xff0c;我们还要知道什么是动态资源 静态资源 静态资源是指在服务器上存储的不经常改变的文件&#xff0c;如图片、CSS 文件、JavaScript 文件、字体文件等。与之相对的是动态资源&#xff0c;动态资源是根据用户请求和服务器端处理生成的…

视频中自监督学习:「我的世界」下指令理解与跟随

本文介绍了北京大学人工智能研究院梁一韬助理教授所带领的 CraftJarvis 团队在「我的世界」环境下探索通用智能体设计的新进展&#xff0c;题为“GROOT: Learning to Follow Instructions by Watching Gameplay Videos”。 ​ GROOT 该研究的核心目标是探索能否摆脱文本数据的标…

图形化编程:一种全新的编程方式

在当今数字化世界中&#xff0c;编程已经成为一项重要的技能&#xff0c;而图形化编程则是一种全新的编程方式&#xff0c;它通过图形化的界面和拖拽式的操作方式&#xff0c;让编程变得更加直观、简单和有趣。6547网将介绍图形化编程的概念、特点以及在教育、游戏开发等领域的…

cobalt_strike_4.7启动报错.teamserver: 行 6: .TeamServerImage: 权限不够(解决方法)

cobalt_strike_4.7启动报错.teamserver: 行 6: .TeamServerImage: 权限不够(解决方法) 是TeamServerImage文件没有执行权限&#xff0c;不是teamserver这个文件。哎~ ​​

第十二章 React 路由配置,路由参数获取

一、专栏介绍 &#x1f436;&#x1f436; 欢迎加入本专栏&#xff01;本专栏将引领您快速上手React&#xff0c;让我们一起放弃放弃的念头&#xff0c;开始学习之旅吧&#xff01;我们将从搭建React项目开始&#xff0c;逐步深入讲解最核心的hooks&#xff0c;以及React路由、…