C++——电话号码的字母组合问题

news2025/1/24 17:42:41

文章目录

  • 电话号码的字母组合
    • 题目链接
    • 思路:
    • 代码:
    • 调试演示


电话号码的字母组合

题目链接

思路:

首先使用string类的数组存储每个数字对应的所有可能的字母,然后进行回溯操作。

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

回溯过程中维护一个字符串,表示已有的字母排列(如果未遍历完电话号码的所有数字,则已有的字母排列是不完整的)。该字符串初始为空。每次取电话号码的一位数字,从哈希表中获得该数字对应的所有可能的字母,并将其中的一个字母插入到已有的字母排列后面,然后继续处理电话号码的后一位数字,直到处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列。

回溯算法用于寻找所有的可行解,如果发现一个解不可行,则会舍弃不可行的解。在这道题中,由于每个数字对应的每个字母都可能进入字母组合,因此不存在不可行的解,直接穷举所有的解即可。

但是思路易想,实现难,回溯我们这里就采用多路递归,比较难想的就是要考虑清楚递归的时候要传什么变量去控制递归的深度,然后需要考虑是函数调用时是传值?还是传引用,下面代码定义的 vector<string> MyString;就是要存每一次拼接好的字符串就需要用传引用调用,那么这里就还需要定义一个string类型的combine;来完成一个拼接的功能,用范围for去让数字所代表的字符串逐个进入递归函数中,用times 控制递归次数,这个次数times如果和digits.size()相等,那么就将拼接好的字符串尾插到combine中。

代码:

class Solution {
public:
    

    void Combine(vector<string> &MyString, int times, string digits, string combine)
    {
        string arr[] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };

        if (times == digits.size())
        {
            MyString.push_back(combine);
            return;
        }

        for (auto ch : arr[digits[times] - '0'])
        {

            Combine(MyString, times + 1, digits, combine + ch);
        }
        
    }
    

    vector<string> letterCombinations(string digits) {
        

        vector<string> MyString;//最终组合好的vector
        
        if (digits.size() == 0)//当这个字符串是空串的时候,直接返回就行
        {
            return MyString;
        }

        string combine;//靠他完成一个拼接的功能
        int times = 0;//控制递归次数
        
        Combine(MyString, times, digits, combine);//递归函数


        return MyString;


    }
};

调试演示


下面是当digiets为字符串“2”时的调试演示。
在这里插入图片描述


下面是当digiets为字符串“23”时的调试演示。在这里插入图片描述


好了今天的分享就到此为止了
最后:如果你觉得对你有用就一键三连吧,哪里有没看懂的地方或者哪里有错误可以在评论区留言欢迎批评指正,作者看到的话会第一时间回复。
end


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

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

相关文章

分享88个NET源码,总有一款适合您

链接&#xff1a;https://pan.baidu.com/s/1dPlj8w-rvVQXuJOHPO6tBA?pwddj0d 提取码&#xff1a;dj0d 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载后可以看到。 启明星Appform员工请假系统 25175云酒店管…

微模块化炙手可热,数据中心走向智能化取胜

近年来&#xff0c;“微模块化”成为数据中心领域炙手可热的话题。 Gartner《企业数据中心未来趋势报告》预测&#xff0c;AI、5G、新型电池、模块化设计思想等将改变数据中心的未来&#xff0c;数据中心将走向分散化&#xff0c;并且预计到2025年&#xff0c;微数据中心的数量…

(附源码)python电影院信息管理系统 毕业设计 021844

电影院信息管理系统的设计与实现 摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。电影院每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的电影院信息管理系统。 …

你的NET程序需要保护吗?Agile.net 6.6.X 注入式Crack

Agile.net 使用专利技术将 MSIL 代码转换为虚拟操作码&#xff0c;只有安全的虚拟机才能理解。虚拟机直接处理虚拟操作码&#xff0c;模拟原始代码行为而不将代码转换回其原始形式。破坏保护成为NP完全问题&#xff0c;从而使Agile.net成为唯一保证您的代码不会被破坏的混淆器&…

【保姆级】手把手Debug循环依赖的整体流程

我们先看一下循环依赖&#xff0c;这样看、 或者这样看、 一提到循环依赖基本必提三级缓存&#xff0c;本篇又是篇保姆级的Debug教程&#xff0c;详解出现循环依赖Spring处理的全过程&#xff0c;之前也介绍过一些与本篇相关的内容&#xff1a; 想瞅瞅三级缓存的庐山真面目可以…

2022/11/27[指针] 指针与函数基础

程序&#xff1a;求10个数的最大数 1、定义指向函数的指针变量调用函数的方法 一般定义形式为&#xff1a;类型名 &#xff08;*指针变量名)()&#xff1b; #include<stdio.h> int main() {int i, m, a[10], max(int* p);int (*f)();for (i 0; i < 10; i)scanf_s(&q…

牛客网基础知识强化巩固-周结03

数组强化训练篇 2022-11-21 打卡 知识点总结 什么是渐进时间复杂度 渐进时间复杂度是指n趋于无穷时的复杂度。向有序表中任意一个位置插入元素&#xff0c;插入位置之后的元素依次挪动一个位置&#xff0c;假设元素插入的位置坐标为k&#xff0c;则时间复杂度为O(k)&#xf…

名词性从句

目录 1.名词性从句 1.1陈述句 1.2一般疑问句变名词性从句 1.3特殊疑问句变名词性从句 1.4特别的what 2.同位语从句 3.同位语从句与定语从句的区别 4.同位语从句的巅峰知识点 5.主语从句 5.2 并列主语从句 5.3主语从句巅峰知识点 6.宾语从句 主系表是不能被动的。所以第…

WPF-控件的常用属性-单例-隧道事件

特殊字符 小于< 大于> 空格xml:space"preserve" 例如&#xff1a;TextBox Grid.Column"1" xml:space"preserve">aaaaa .</TextBox> 从一个xaml文件中获取xaml内容 //DependencyObject是wpf控件的基类&#xff0c;它可以放到…

Ubuntu 安装“安装程序向硬盘复制文件时遇到错误[Errno 5] Input/output error”错误解决过程记录

前阵子装 Ubuntu&#xff0c;原本已经装了几百遍的系统它又双叒叕出问题了&#xff0c;问题内容就如标题看到的那样。解决过程中经历了很多坎坷&#xff0c;不过好在最后还是成功了~ 下面整理了一下我解决问题的过程&#xff0c;需要自取~ 方法 1&#xff1a;烧录 U 盘时文件格…

chapter3——处理多个时钟

目录1.多时钟域2.多时钟域设计的难题3.多时钟设计的处理技术时钟命名规则分模块设计跨时钟域4.跨时钟域同频零相位差时钟同频恒定相位差时钟非同频、可变相位差时钟整数倍频率的时钟非整数倍频率的时钟5.握手信号方法6.使用同步FIFO传输数据7.异步FIFO1.多时钟域 常见的多时钟…

linux环境验证c++程序库间调用

目录 0 背景 1 VMware、以及linux安装 2 安装QtCreator 2.1 下载速度慢&#xff0c;使用国内镜像 2.2 执行有问题&#xff0c;修改权限 2.3 验证是否可用 2.4 调试&#xff08;待解决&#xff09; 3 开发程序进行验证 4 其他问题 4.1 虚拟机与主机无法拷贝文件&#x…

python3-函数与参数以及空值

目录画星星空值None函数与Lambda一、函数定义二、引用变量查找三、传值调用函数四、函数对象五、函数文档旋转角度绘制函数图形画星星 程序2-7-7主要使用turtle.forward前进操作和turtle.left左转操作在屏幕上画星星。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #2-7-…

操作符详解(1)

目录 一、操作符分类 二、算术操作符 三、位移操作符 1、<< 左位移操作符号 2、>> 右位移操作符 四、位操作符 1、& --- 按位与 2、| --- 按位或 3、^ --- 按位异或 变态题 五、赋值操作符 符合赋值符 一、操作符分类 操作符也被称为运算符。 …

小程序注册安装以及新手快速入门教程

一、注册并安装微信小程序 1.打开 https&#xff1a;//mp.weixin.qq.com/ 网址&#xff0c;点击立即注册即可进入小程序开发账号的注册流程&#xff0c;注册的账号类型选择小程序。 2.根据注册要求注册&#xff0c;发送邮箱信息&#xff0c;接收到微信团队发送的邮箱信息后&am…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整&#xff0c;基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化&#xff0c;建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

Spark - 介绍及使用 Scala、Java、Python 三种语言演示

一、Spark Apache Spark 是一个快速的&#xff0c;多用途的集群计算系统&#xff0c; 相对于 Hadoop MapReduce 将中间结果保存在磁盘中&#xff0c; Spark 使用了内存保存中间结果&#xff0c; 能在数据尚未写入硬盘时在内存中进行运算。 Spark 只是一个计算框架, 不像 Hadoo…

几率波量子雷达/反事实量子通信

物理学中有哪些不可思议&#xff08;违背直觉&#xff09;的事实&#xff1f; - 知乎 利用粒子的双缝干涉原理&#xff0c;可以在物体偏离的情况下&#xff0c;探测到物体。 我们不需要用光子照射物体&#xff0c;就能感知到是否有物体存在。 这是什么意思&#xff1f; 这就…

3516DV300 推流

3516DV300 推流 基于ffmpeg将编码后的264文件&#xff08;或者直接推流&#xff09;推流出去&#xff0c;使用ffplay进行播放和验证。 ffmpeg版本&#xff1a;N-109124-g63db6a02a7 RELEASE&#xff1a;5.1.git ffmpeg udp文件推流 命令行 这里用的是开发板编码出的码流&…

MIT 6.S081 Operating System Lecture5 (随意的笔记)

系列文章目录 文章目录系列文章目录TrapsA questionsyscallTraps 用户空间和内核空间的切换通常被称为 trap example: shwrite()ecall(); //write 通过 ecall() 指令执行系统调用之后跳转执行到 usertrap 如下图的执行过程。最终sys_write将要显示的数据输出到 console 上 …