【practise】电话号码的字母组合

简介: 【practise】电话号码的字母组合

关于我:



睡觉待开机:个人主页个人专栏: 《优选算法》《C语言》《CPP》生活的理想,就是为了理想的生活!作者留言

PDF版免费提供:倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。

留下你的建议:倘若你发现本文中的内容和配图有任何错误或改进建议,请直接评论或者私信。

倡导提问与交流:关于本文任何不明之处,请及时评论和私信,看到即回复。


1.前言

今天来分享一道比较中规中矩的题目题解,即电话号码的组合。这道题思路上来说很简单,但是前提得理解深度优先遍历



什么是深度优先遍历?

举个例子,二叉树中序遍历(当然二叉树的前序、后序遍历也属于深度优先遍历),按照左子树、根、右子树的方式依次遍历整棵树。


2.题目介绍

题目链接:LINK

这道题题意很简单,给到我们一个字符串,然后字符串里有一些数字字符,每个数字字符对应一个特定的字母字符串,挨个取字母字符串元素,取出所有组合即可。

比如,给到我们的数字字符串是:“234”,那我们的遍历图解如下:

3.题解思路

我们的整体思路使用哈希表存储每个字符数字对应的所有可能的字母,并对其进行回溯。

回溯的过程:我们用一个string类型来维护我们每次维护的字符串结果,得到每个string结果之后,将其尾插到返回结果中去。

该字符串初始为空,每次取电话号码中的一位数字,然后根据这个数字获得该数字对应的所有可能的字母,将其中的一个字母插入到我们维护的string中,然后继续处理电话号码的后一位数字,知道处理完电话号码中的所有数字,即得到一个完整的字母排列。然后进行回退操作,遍历其余的字母排列。

4.代码示例

class Solution {
public:
    vector<string> letterCombinations(string digits) {
        vector<string> combinations;//用来返回最后的组合结果
        if(digits.empty())//如果为空,返回个空vector即可
        {
            return combinations;
        }
        //下面开始处理一般情况:
        //先制作了哈希表
        unordered_map<char, string> phoneMap{
            {'2', "abc"},
            {'3', "def"},
            {'4', "ghi"},
            {'5', "jkl"},
            {'6', "mno"},
            {'7', "pqrs"},
            {'8', "tuv"},
            {'9', "wxyz"}
        };
        string combination;//用来存储每个组合,即一个字符串
        backtrack(combinations, combination, digits, phoneMap, 0);
        
        //返回
        return combinations;
    }
    void backtrack(vector<string>& combinations, string& combination, const string& digits, const unordered_map<char, string>&phoneMap, int index)
    {
        //当下标取到digit末尾时候,表示完成了一个string制作,要把它加入到combinations中去
        if(index == digits.size())
        {
            combinations.push_back(combination);
        }
        else//如果不是,那我们先取digits中的数字,再根据数字拿到对应的string,再取string中所需要的那一位
        {
            char digit = digits.at(index);
            const string& letters = phoneMap.at(digit);
            for(auto& letter : letters)
            {
                combination.push_back(letter);
                backtrack(combinations, combination, digits, phoneMap, index+1);
                combination.pop_back();
            }
        }
    }
};

5.时间/空间复杂度分析

注意:m指的是给定的一串数字中对应3位字母的数字的个数,n指得是一串数字中对应4位字母得数字得个数。

时间复杂度:O(3^m + 4^n)

时间复杂度主要就是取决于数字长度了,假定每个数字都对应3个字母,那么就是数字个数的三次方,但是存在部分数字是对应四个字母的,所以应该是上面所示。

空间复杂度:O(m + n)

空间复杂度主要取决于两部分,一部分是哈希表,另一部分是我们调用得递归函数所对应的空间开销。其中由于哈希表底层实现,哈希表的空间复杂度为O(1),调用的递归函数最大递归层级就是给定的字符串数字的长度次。



好的,如果本篇文章对你有帮助,不妨点个赞~谢谢。


EOF

相关文章
|
Ubuntu C++
Ubuntu20.04(LTS)换源(阿里、清华)以及sources.list分享
自用好使,谨慎操作 鄙人在安装完Ubuntu之后,安装Code::blocks的时候,在此之前需要安装C/C++编译环境build-essential,在安装的时候报出有关软件包依赖性的关系问题,经过一波研究发现,有的大佬通过安装aptitude来解决问题,因为aptitude可以很好地解决依赖关系 但是在安装aptitude的时候,还是出现了依赖关系,莫得办法 安装aptitude的命令
7408 0
|
机器学习/深度学习
神经网络与深度学习---验证集(测试集)准确率高于训练集准确率的原因
神经网络与深度学习---验证集(测试集)准确率高于训练集准确率的原因
4600 2
|
7月前
|
传感器 算法
船舶运动控制,PID控制算法,反步积分控制器
船舶运动控制,PID控制算法,反步积分控制器
|
6月前
|
Kubernetes Cloud Native 云计算
云计算与云原生技术探索
🌟蒋星熠Jaxonic,云原生探索者!以代码为舟,遨游技术星河。专注容器化、微服务、K8s与DevOps,践行GitOps理念,拥抱多云未来。用架构编织星辰,让创新照亮极客征途!
云计算与云原生技术探索
|
7月前
|
人工智能 运维 安全
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
迈格网络推出“天机”新版本,以AI自学习、全端防护、主动安全三大核心能力,重构网络安全防线。融合AI引擎与DeepSeek-R1模型,实现威胁预测、零日防御、自动化响应,覆盖Web、APP、小程序全场景,助力企业从被动防御迈向主动免疫,护航数字化转型。
从被动防御到主动免疫进化!迈格网络 “天机” AI 安全防护平台,助推全端防护性能提升
|
5月前
|
机器学习/深度学习 JSON 搜索推荐
1688图片搜索API技术文档
1688图片搜索API(拍立淘)是阿里巴巴官方图像搜货工具,支持通过图片URL或Base64编码查找1688平台同款或相似商品。基于深度学习技术,精准匹配商品ID、标题、价格、销量、供应商等全维度信息,命中率超85%,单次响应≤1秒,支持批量调用与分页排序,适用于电商比价、选品采购等场景。
|
5月前
|
IDE Java Linux
Java基础阶段的常见错误和解决方案的文章
本文精选Java基础常见错误与解决方案的优质文章,涵盖环境配置、语法基础、面向对象、异常处理、集合IO等核心知识点,结合典型错误代码与原理分析,助力新手避坑提效,适合系统学习与实战参考。
222 0
|
7月前
|
算法 安全 定位技术
基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划研究(Matlab代码实现)
基于改进拥挤距离的多模态多目标优化差分进化(MMODE-ICD)求解无人机三维路径规划研究(Matlab代码实现)
237 2
|
7月前
|
机器学习/深度学习 人工智能 安全
物联网规则引擎:数据驱动决策的分步指南
数据分析工具能深入挖掘数据,揭示隐藏规律,结合机器学习与AI技术,提升决策效率与精准度。通过衡量关键绩效指标,企业可评估数据驱动决策对业务增长、客户满意度及运营效率的实际影响,推动数据驱动文化发展。
|
8月前
|
机器学习/深度学习 人工智能 监控
AI 视频监控技术核心解析:三大底层能力支撑智能化升级
AI视频监控突破传统安防局限,依托三大核心技术:从“被动感知”到“主动理解”,实现精准场景识别;从“孤立运行”到“深度协同”,构建业务联动闭环;从“高门槛应用”到“普惠化落地”,降低部署成本与使用门槛。技术融合场景定制、智能决策与轻量化架构,推动安防向高效、智能、普及化方向升级。
1287 0