电话号码的字母组合 【C++】【力扣刷题】

ops/2024/9/25 23:24:21/

 解题思路:

  • 以第一个为例,digits = “23”,表明从电话号码的按键中选取2和3这两个字符,然后去寻找它们各自所对应的字母,这里每一个数字字符所对应的字母的不同,0对应的是空字符,而1的话题目中讲到是不对应任何字母,要注意的是像7和9所对应的是4个字母。
  • 以上这些应该用一个数组或者容器将它们存起来。
  • 这里由于digits的个数是不确定的,所以我们没有办法使用多层for循环来嵌套求解。就需要用到递归,回溯的方式来解题。
  • 那么不难想象,这题应该是多叉树的递归并且保存数据到vector<string>容器中。
class Solution {
public:  vector<string> letterCombinations(string digits){}
};

 解题步骤:

        1.看题,传入一个string类的digits对象,里面是字符串.   返回值是vector<string>

所以我们应该创建一个vector<string>容器的对象 vector<string> statistics;

        2.我们需要把对应的关系映射到一维数组中,放到函数外面。

class Solution {
public:const char* numStrArr[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" vector<string> letterCombinations(string digits){vector<string> statistics;//解题过程return statistics;}
};

    3.我们需要写一个子函数来完成递归操作。那我们需要传什么参数呢? 

        ①我们需要传接收型参数vector<string> statistics;

        ②需要传digits,来获取需要的字符

        ③需要传一个n,来计算深度 

        ④我们还需要能够保存字符串的string类对象

class Solution {
public:const char* numStrArr[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };void _letterCombinations(vector<string>& statistics, string str, int n, string& digits){}vector<string> letterCombinations(string digits){vector<string> statistics;string str;_letterCombinations(statistics, str, 0, digits);return statistics;}
};

    4. 我们需要写一个递归的返回条件

        当到了最深的层次时,先把字符串push_back到vector的容器中,然后回溯。

if (n == digits.size()){statistics.push_back(str);Static++;return;}

5.写执行过程:

int sz = digits[n] - 48;
string s1;
s1 = numStrArr[sz];
for (int i = 0; i < s1.size(); i++)
{char ch = s1[i];_letterCombinations(statistics, str + ch, n + 1, digits);
}

   过程

        1. sz记录数字,为了通过下标来映射字符串。

        2. 把字符串存储到string类里面,方便访问字符,ch=s1[i],记录字符

        3. 递归 

   我们为什么是采用+号,而不是+=呢?

        第一遍adg,然后存到vector<string> statistics对象中
        之后退到上一层,str=="ad",n==2,再递归,把adh存储起来。
        依次进行。

6.还差最后一步:

        有一个测试用例是我们就不能进入子函数。

vector<string> letterCombinations(string digits){vector<string> statistics;if(digits.size()==0) return statistics;//如果为空,就不进入子函数string str;_letterCombinations(statistics, str, 0, digits);return statistics;}

6.完整的代码:

class Solution {
public:const char* numStrArr[10] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };void _letterCombinations(vector<string>& statistics, string str, int n, string& digits){if (n == digits.size()){statistics.push_back(str);return;}int sz = digits[n] - 48;string s1;s1 = numStrArr[sz];for (int i = 0; i < s1.size(); i++){char ch = s1[i];_letterCombinations(statistics, str + ch, n + 1, digits);}}vector<string> letterCombinations(string digits){vector<string> statistics;if(digits.size()==0) return statistics;string str;_letterCombinations(statistics, str, 0, digits);return statistics;}
};


http://www.ppmy.cn/ops/31839.html

相关文章

解决clickhouse 启动报错

解决clickhouse 启动报错 Error response from daemon: driver failed programming external connectivity on endpoint clickhouse-server (b42457434cebe7d8ad024d31e4fd28eae2139bb2b5046c283bea17ce4398d5b0): Error starting userland proxy: listen tcp4 0.0.0.0:8123: …

基于Springboot的民宿管理平台

基于SpringbootVue的民宿管理平台设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringbootMybatis工具&#xff1a;IDEA、Maven、Navicat 系统展示 用户登录 首页 民宿信息 后台登录 后台首页 用户管理 商家管理 民宿信息管理 房间类型管理 …

JavaEE 初阶篇-深入了解网络原理中传输层的端口号与 UDP 协议报文格式

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 端口号概述 1.1 端口号的作用 1.2 端口号不能重复被多个进程绑定 2.0 传输层协议 - UDP 2.1 UDP 的特性 2.2 UDP 的报文格式 1.0 端口号概述 端口号是计算机网络中…

详细介绍ARM-ORACLE Database 19c数据库下载

目录 1. 前言 2. 获取方式 2.1 ORACLE专栏 2.2 ORACLE下载站点 1. 前言 现有网络上已有非常多关于ORACLE数据库机下载的介绍&#xff0c;但对于ARM平台的介绍不多&#xff0c;借此机会我将该版的下载步骤做如下说明&#xff0c;希望能够一些不明之人提供帮助和参考 2. 获…

前端工程化升级之路:Webpack 5深度配置与优化策略

前端工程化升级到Webpack 5的过程中&#xff0c;深度配置与优化策略可以从以下几个关键方面进行深入探讨&#xff1a; 模块打包优化&#xff1a; Tree Shaking&#xff1a;Webpack 5增强了对ES6模块的静态分析能力&#xff0c;更准确地去除未使用的导出模块&#xff0c;减少最终…

Sass语法---sass的安装和引用

什么是Sass Sass&#xff08;英文全称&#xff1a;Syntactically Awesome Stylesheets&#xff09; Sass 是一个 CSS 预处理器。 Sass 是 CSS 扩展语言&#xff0c;可以帮助我们减少 CSS 重复的代码&#xff0c;节省开发时间。 Sass 完全兼容所有版本的 CSS。 Sass 扩展了…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 继续接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

Ubuntu下vscode彻底卸载

参考步骤&#xff1a;大佬博客 1、 执行以下命令卸载 Visual Studio Code&#xff1a; sudo apt purge code2、删除 Visual Studio Code 的配置文件和缓存文件。这些文件通常位于用户的主目录下的 .config 和 .cache 目录中。你可以使用以下命令删除它们&#xff1a; rm -rf …