电话号码的字母组合(C++实现)

电话号码的字母组合

  • 题目
  • 代码
  • 思路及代码讲解
  • 代码(有注释版)

题目


电话号码的字母组合


在这里插入图片描述

代码

class Solution {

    const char* numsStrArr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:

    void Combine(const string& digits, int i,string CombineStr,vector<string>& ret )
    {
        if(i==digits.size())
        {
            ret.push_back(CombineStr);
            return ;
        }
        int num =digits[i]-'0';
        string str =numsStrArr[num];
        for(auto e:str)
        {
            Combine(digits,i+1,CombineStr+e,ret);
        }
    }

    vector<string> letterCombinations(string digits) {
        vector<string> ret;
        if(digits=="")
        {
            return ret;
        }
        string str;
        Combine(digits,0,str,ret);
        return ret;

    };

};

思路及代码讲解

  1. 定义一个函数letterCombinations,用于生成给定数字字符串的所有可能的字母组合。

  2. 在类中定义一个私有成员变量numsStrArr,它是一个包含了数字0到9的字符串数组,每个数字对应一组可能的字母。例如,numsStrArr[2]对应的是"abc",numsStrArr[3]对应的是"def",以此类推。

  3. 接下来是函数Combine,它是一个递归函数,用于生成数字字符串的所有可能的字母组合。参数digits是输入的数字字符串,参数i表示当前处理的数字索引,参数CombineStr表示已经组合好的字母字符串,参数ret是存储结果的向量。

  4. 函数首先检查递归结束的条件,即当i等于digits的长度时,将已经组合好的字符串CombineStr加入到结果向量ret中,并返回。

  5. 接着,函数根据当前数字索引i从digits中获取数字,并在numsStrArr中找到对应的字母字符串str。

  6. 然后,函数使用一个循环遍历str中的每个字母,并调用自身递归地处理下一个数字索引i+1,并将当前字母添加到已经组合好的字符串CombineStr后面。

  7. 最后,在主函数letterCombinations中,首先创建一个空的结果向量ret。

  8. 然后,检查输入的数字字符串digits是否为空,如果为空,则直接返回空的结果向量。

  9. 接下来,创建一个空字符串str,并调用Combine函数开始递归生成所有可能的字母组合。

  10. 最后,将结果向量ret返回作为函数的输出。


代码(有注释版)

class Solution {
    const char* numsStrArr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    // 数字对应的字母组合数组

public:
    // 递归生成数字字符串的所有可能的字母组合
    void Combine(const string& digits, int i, string CombineStr, vector<string>& ret ) {
        // 递归结束条件:已经处理完所有数字
        if(i==digits.size()) {
            // 将已经组合好的字符串加入结果向量
            ret.push_back(CombineStr);
            return ;
        }
        
        int num =digits[i]-'0';
        // 获取当前数字对应的字母字符串
        string str =numsStrArr[num];
        
        // 遍历当前数字对应的字母字符串中的每个字母
        for(auto e:str) {
            // 递归处理下一个数字索引,并将当前字母添加到已经组合好的字符串后面
            Combine(digits,i+1,CombineStr+e,ret);
        }
    }

    // 生成数字字符串的所有可能的字母组合
    vector<string> letterCombinations(string digits) {
        vector<string> ret;
        if(digits=="") {
            return ret; // 如果输入字符串为空,则直接返回空结果向量
        }
        
        string str;
        // 调用递归函数生成所有可能的字母组合
        Combine(digits, 0, str, ret);
        return ret; // 返回结果向量
    };
};

(本题完)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用调研工具做好问卷调查的方法与策略

提起问卷调查大家应该都不陌生&#xff0c;学校会使用问卷调查收集学生信息或意见、企业使用问卷调查了解市场、深入用户。和其他的调查方式相比&#xff0c;问卷调查更能贴近被调查者真实想法&#xff0c;反馈真实数据。而互联网的崛起也使得大家纷纷从线下问卷转战到线上问卷…

ubantu配置网卡ip

1.ifconfig查看网卡 2. vi /etc/network/interfaces auto ens33 # 网卡名 iface ens33 inet static # 注意网卡名 address 192.168.43.10 # 配置ip地址 netmask 255.255.255.0 # 掩码 gateway 192.168.43.1 # 网关 3.重启网卡 ifconfig ens33 down ifco…

GoLong的学习之路,进阶,微服务之原理,RPC

其实我早就很想写这篇文章了&#xff0c;RPC是一切现代计算机应用中非常重要的思想。也是微服务和分布式的总体设计思想。只能说是非常中要&#xff0c;远的不说&#xff0c;就说进的这个是面试必问的。不管用的上不&#xff0c;但是就是非常重要。 文章目录 RPC的原理本地调用…

【JavaScript】3.4 JavaScript在现代前端开发中的应用

文章目录 1. 用户交互2. 动态内容3. 前端路由4. API 请求总结 JavaScript 是现代前端开发的核心。无论是交互效果&#xff0c;还是复杂的前端应用&#xff0c;JavaScript 都发挥着关键作用。在本章节中&#xff0c;我们将探讨 JavaScript 在现代前端开发中的应用&#xff0c;包…

【PixPin】媲美QQ/Snipaste截图贴图OCR工具

PixPin PixPin是一款截图工具&#xff0c;它集成了截图、长截图、贴图、标注、OCR识别等众多功能&#xff0c;软件体积小巧&#xff0c;使用简单&#xff0c;是一款非常棒的截图工具。之前使用过Snipaste工具的小伙伴用起来应该是得心应手。 从左往右的功能依次是&#xff1a;…

你好!插值查找【JAVA】

1.初次相识 插值查找&#xff08;interpolation search&#xff09;是一种根据待查找关键字在有序数组中的大致位置决定查找范围的查找算法。插值查找与二分查找类似&#xff0c;区别在于插值查找对于待查找关键字在数组中的位置进行估计&#xff0c;从而更精准地定位到待查找关…

数据结构-03-栈

1-栈的结构和特点 先进后出&#xff0c;后进先出 是栈的特点&#xff1b; 从图中&#xff0c;我们看到A入栈先放入底部&#xff0c;然后依次B和C&#xff1b;出栈的顺序依次是C-B-A&#xff1b;这种结构只能在一端操作。所以当某个数据集合只涉及在一端插入和删除数据&#xf…

0-1背包问题详解

0-1背包问题 部分一&#xff1a;问题描述 0-1背包问题是一类经典的组合优化问题&#xff0c;它出现在很多实际生活和工业环境中。问题描述如下&#xff1a; 假设你是一个冒险家&#xff0c;带着一个可承重的背包&#xff0c;面对一堆宝物。每件宝物都有自己的价值&#xff0…

新闻宣传稿怎么写?手把手教你!

一篇高质量的的新闻宣传稿是如何炼成的&#xff1f;本文伯乐网络传媒将带你走进这个神秘的领域&#xff0c;揭秘爆款文案背后的秘密。在这里&#xff0c;你将学到一系列实用技巧&#xff0c;让你的新闻宣传稿更具吸引力、独特见解和深度。 一、选题与立意&#xff1a;抓住热点&…

数据结构---顺序表

文章目录 线性表线性表的定义线性表分类 顺序表顺次表的存储结构实现顺序表的主要接口函数初始化顺序表顺序表尾插顺序表尾删顺序表头插顺序表头删在指定位置插入数据在指定的位置删除数据头插&#xff0c;头删&#xff0c;尾插&#xff0c;尾删新写法打印顺序表销毁顺序表 线性…

使用yolov7进行多图像视频识别

1.yolov7你可以让你简单的部署,比起前几代来说特别简单 #下面是我转换老友记的测试视频,可以看到几乎可以准确预测 2.步骤 1.在github官网下载代码 https://github.com/WongKinYiu/yolov7 2.点击下载权重文件放到项目中 3.安装依赖,我的python版本是3.6的 pip install -r requ…

每日一练2023.11.27——考试座位号【PTA】

题目链接&#xff1a;L1-005 考试座位号 题目要求&#xff1a; 每个 PAT 考生在参加考试时都会被分配两个座位号&#xff0c;一个是试机座位&#xff0c;一个是考试座位。正常情况下&#xff0c;考生在入场时先得到试机座位号码&#xff0c;入座进入试机状态后&#xff0c;系…

Adobe Indesign操作

Indesign 界面 图像描摹 在Indesign中打开图片&#xff0c;选择图像描摹&#xff0c;鼠标点击。 然后&#xff0c;出现如下效果。 在此基础上&#xff0c;可以对图片进行进一步操作。 【心得】

【前端】多线程 worker

VUE3 引用 npm install worker-loader 在vue.config.js文件的defineConfig里加上配置参数 chainWebpack: config > {config.module.rule(worker-loader).test(/\.worker\.js$/).use({loader: worker-loader,options: {inline: true}}).loader(worker-loader).end()}先在…

循环单向链表(详解)

循环单向链表原理 循环单项链表项目结构 头文件RecycleLinlList.h 头文件具体代码 #ifndef RECYCLRLINKLIST #define RECYCLRLINKLIST#include <stdio.h> #include <stdlib.h>// 宏定义 #define CIRCLELINKLIST_TRUE 1 #define CIRCLELINKLIST_FALSE 0 // 链表…

ChatGPT 问世一周年之际,开源大模型能否迎头赶上?

就在11月30日&#xff0c;ChatGPT 迎来了它的问世一周年&#xff0c;这个来自 OpenAI 的强大AI在过去一年里取得了巨大的发展&#xff0c;迅速吸引各个领域的用户群体。 我们首先回忆一下 OpenAI和ChatGPT这一年的大事记&#xff08;表格由ChatGPT辅助生成&#xff09;&#x…

java基础面试题(二)

java后端面试题大全 3.JVM3.1 对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置?3.2 java类的加载流程3.3 ThreadLocal 3.JVM 3.1 对象实例、类信息、常量、静态变量分别在运行时数据区的哪个位置? 堆 对象实例、String常量池、基本类型常量池、静态变量方法…

设计模式详解(二):抽象工厂——Abstract Factory

目录导航 抽象工厂及其作用工厂方法的好处工厂方法的实现关系图实现步骤 工厂方法的适用场景工厂方法举例 抽象工厂及其作用 工厂方法是一种创建型设计模式。所谓创建型设计模式是说针对创建对象方面的设计模式。在面向对象的编程语言里&#xff0c;我们通过对象间的相互协作&…

ios-class-guard - iOS代码混淆与加固实践

​ 目录 ios-class-guard - iOS代码混淆与加固实践 摘要 引言 一、class-dump 二、ios-class-guard 混淆原理 三、ios-class-guard 混淆结果 四、ios-class-guar 的使用 ios-class-guard 不支持 Swift ios-class-guard 不支持 iPhoneOS SDK ios-class-guard --sdk-ro…

【紫光同创PCIE教程】——DMA读写/PIO内存读写TLP解析

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处&#xff08;http://www.meyesemi.com) 一&#xff1a;PIO内存读写操作TLP解析 PCIE有三种空间——内存空间、IO空间、配置空间&#xff0c;其中内存空…
最新文章