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

news2024/11/20 9:14:25

 解题思路:

  • 以第一个为例,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.coloradmin.cn/o/1641915.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用macof发起MAC地址泛洪攻击

使用macof发起MAC地址泛洪攻击 MAC地址泛洪攻击原理&#xff1a; MAC地址泛洪攻击是一种针对交换机的攻击方式&#xff0c;目的是监听同一局域网中用户的通信数据。交换机的工作核心&#xff1a;端口- MAC地址映射表。这张表记录了交换机每个端口和与之相连的主机MAC地址之间…

MATLAB实现遗传算法优化第三类生产线平衡问题

第三类生产线平衡问题的数学模型 假设&#xff1a; 工作站数量&#xff08;m&#xff09;和生产线节拍&#xff08;CT&#xff09;是预设并固定的。每个任务&#xff08;或作业元素&#xff09;只能分配到一个工作站中。任务的执行顺序是预先确定的&#xff0c;且不可更改。每…

JavaScript 动态网页实例 —— 文字移动

前言 介绍文字使用的特殊效果。本章介绍文字的移动效果,主要包括:文字的垂直滚动、文字的渐隐渐显、文字的闪烁显示、文字的随意拖动、文字的坠落显示、页面内飘动的文字、漫天飞舞的文字、文字的下落效果。对于这些效果,读者只需稍加修改,就可以应用在自己的页面设计中。 …

vue快速入门(五十)重定向

注释很详细&#xff0c;直接上代码 上一篇 本篇建立在之前篇目前提下针对重定向进行演示 新增内容 路由重定向写法 源码 src/router/index.js //导入所需模块 import Vue from "vue"; import VueRouter from "vue-router"; import myMusic from "/v…

uniapp乡村社区户籍问外来人员管理系统 微信小程序python+java+node.js+php

基于微信小程序的外来人员管理系统项目的概述设计分析&#xff0c;主要内容有的私教预约平台系统平台的具体分析&#xff0c;进行数据库的是设计&#xff0c;数据采用MySQL数据库&#xff0c;并且对于系统的设计采用比较人性化的操作设计&#xff0c;对于系统出现的错误信息可以…

JZ71 变态跳台阶

&#x1f600;前言 本文探讨了一个有关青蛙跳台阶的变体问题&#xff0c;与传统的台阶跳跃不同&#xff0c;这只青蛙每次可以跳上任意多的台阶。我们需要解决的问题是&#xff1a;对于给定的台阶数&#xff0c;计算青蛙跳上该台阶的所有可能方法。本文将通过动态规划和数学推导…

xftp破解版?No!xftp平替开源工具✔

文章目录 一、背景说明二、WindTerm介绍三、简单使用说明3.1 新建一个ssh连接窗口![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/bfbe5114916e4a7e94ca0f9ceb05ca37.png)3.2 输入主机ip和端口号3.3 点击Continue3.4 输入密码3.5 登入成功3.6 下载文件到本地3.7 上…

Springboot(SSM)项目实现数据脱敏

目录 一、引入hutool的依赖 二、sql脚本 三、自定义注解代码 3.1 自定义注解 3.2 自定义一个枚举,用于定义脱敏的类型 3.3 序列化 四、使用脱敏注解 4.1 Person.java 4.2 controller 4.3 dao 五、源代码参考 一、引入hutool的依赖 <dependency><groupId>…

Ftrans文件外发系统 构建安全可控文件外发流程

文件外发系统是企业数据安全管理中的关键组成部分&#xff0c;它主要用于处理企业内部文件向外部传输的流程&#xff0c;确保数据在合法、安全、可控的前提下进行外发。 文件外发系统的主要作用包括&#xff1a; 1、防止数据泄露&#xff1a;通过严格的审批流程和安全策略&…

信创 | 信创产业人才需求与培养机制:优化策略与实践探索

信创产业的人才需求与培养机制面临着多方面的挑战和机遇。首先&#xff0c;信创产业的快速发展带来了巨大的人才需求&#xff0c;但目前人才培养供给与企业发展需求之间存在不匹配的问题。这种不匹配主要表现在课程体系不健全、产教融合不够深入、校企联动性不足以及职业培训市…

eNSP-DHCP服务配置

一、拓扑结构搭建 二、主机配置 pc1、pc2 三、路由器配置 <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进图接口 [Huawei-GigabitEthernet0/0/0]ip address 192.168.0.1 24 #设置接口ip [Huawei-GigabitEthernet0/0/0]q #返回上一级 [Huawei]dhcp enable #开启DHCP服…

YOLOv5改进(一)MobileNetv3替换主干网络

前言 本篇博客主要讲解YOLOv5主干网络的替换&#xff0c;使用MobileNetv3实现模型轻量化&#xff0c;平衡速度和精度。以下为改进的具体流程~ 目录 一、改进MobileNetV3_Small 第一步&#xff1a;修改common.py,新增MobileNetV3 第二步&#xff1a;在yolo.py的parse_model函…

C++设计模式-结构型设计模式

写少量的代码来应对未来需求的变化。 单例模式 定义 保证一个类仅有一个实例&#xff0c;并提供一个该实例的全局访问点。——《设计模式》GoF 解决问题 稳定点&#xff1a; 类只有一个实例&#xff0c;提供全局的访问点&#xff08;抽象&#xff09; 变化点&#xff1a…

漏洞扫描神器:AppScan 保姆级教程(附破解步骤)

一、介绍 AppScan是IBM的一款应用程序安全测试工具&#xff0c;旨在帮助组织发现和修复应用程序中的安全漏洞。它提供了全面的功能和工具&#xff0c;用于自动化应用程序安全测试、漏洞扫描和漏洞管理。 以下是AppScan的一些主要特点和功能&#xff1a; 1. 自动化漏洞扫描&a…

RabbitMQ知识点总结和复习

之前项目中用到RabbitMQ的场景主要是订单信息的传递&#xff0c;还有就是利用RabbitMQ的死信队列属性设置&#xff0c;实现延迟队列效果&#xff0c;实现超时支付取消功能&#xff0c;以及在两个不同项目中传递数据等场景。 最近几年的工作中都是一直用的RabbitMQ&#xff0c;…

谈谈Tcpserver开启多线程并发处理遇到的问题!

最近在学习最基础的socket网络编程&#xff0c;在Tcpserver开启多线程并发处理时遇到了一些问题&#xff01; 说明 在linux以及Windows的共享文件夹进行编写的&#xff0c;所以代码中有的部分使用 #ifdef WIN64 ... #else ... #endif 进入正题&#xff01;&#xff01;&…

Word文件后缀

Word文件后缀 .docx文件为Microsoft Word文档后缀名&#xff0c;基于XML文件格式 .dotm为Word启用了宏的模板 .dotx为Word模板 .doc为Word97-2003文档&#xff0c;二进制文件格式 参考链接 Word、Excel 和 PowerPoint 的文件格式参考 Learn Microsoft

基于OpenCv的图像特征点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

蓝桥杯练习系统(算法训练)ALGO-947 贫穷的城市

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 某城市有n个小镇&#xff0c;编号是1~n。由于贫穷和缺乏城市规划的人才&#xff0c;每个小镇有且仅有一段单向的公路通往别…

Activiti7 开发快速入门【2024版】

记录开发最核心的部分&#xff0c;理论结合业务实操减少废话&#xff0c;从未接触工作流快速带入开发。假设你是后端的同学学过JAVA和流程图&#xff0c;则可以继续向后看&#xff0c;否则先把基础课程书准备好先翻翻。 为什么要工作流 比起直接使用状态字段&#xff0c;工作…