当前位置: 首页 > article >正文

17.电话号码的字母组合(深度递归遍历解决经典老题)

前文

C++深度递归遍历解决"电话号码的字母组合问题",本题考察的比较全面,考察到 vector的使用,深度遍历以及递归的熟练度,希望能对铁子们有所帮助

一,题目

链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

二,解法

如上图所示,以"256"为例,我们将三个字符串各个字符的排列组合展开,我们发现这个结构类似于多叉树的结构,主要是考察深度遍历,因此我们也可以用递归来完成。

既然已经确定可以用递归来完成,那么我们就需要确定递归所需参数。

首先我们需要创建一个 vector<string> ret用来 存储需要返回的字母组合,同时需要创建 size_t depth控制递归的深度,再创建一个 string combinestr用来 存储每组的字母组合,当然digits也是必须要传的。

所需参数已确定,那么具体的递归过程呢。

我们以上图"ajm" "ajn" "ajo"为例子,具体讲解一下递归的过程

三,代码

代码实现:

class Solution {
    //获取每个数字对应字符串
    //由于0 1没字符,所以设置成空串
    string get_numberstr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
public:
   void Combination(const string& digits,size_t depth,string combinestr,    vector<string>& ret)
   {    
       //depth控制深度,digits的长度就是我们递归的深度
       if(depth==digits.size())
       {
           ret.push_back(combinestr);
           return;
       }
       int digit=digits[depth]-'0';//获取数字字符
       string numberstr=get_numberstr[digit];//获取数字所对应的字符串
       for(auto ch:numberstr)
       {
           Combination(digits,depth+1,combinestr+ch,ret);

       }

   }
    vector<string> letterCombinations(string digits) {
        vector<string> ret;
        if(digits.size()==0)
        {
            return ret;
        }
        size_t depth=0;//控制递归深度
        string combinestr;//存储每组字符串
        Combination(digits,depth,combinestr,ret);
        return ret;
    }
};
成功实现

http://www.kler.cn/a/500.html

相关文章:

  • c/c++ 无法跳转定义
  • 操作002:HelloWorld
  • Glossary 词汇表中英文对照
  • 《AI智能体》——魔搭工作流模式
  • Day7补代码随想录 454.四数相加II 383赎金信 15.三数之和 18.四数之和
  • 水电站视频智能监控系统方案设计与技术应用方案
  • Python的30个编程技巧
  • 软测面试了一个00后,绝对能称为是内卷届的天花板
  • 数据结构One——绪论
  • ChatGPT是如何训练得到的?通俗讲解
  • 程序员必会技能—— 使用日志
  • 【IoT】嵌入式驱动开发:IIC子系统
  • Qt浏览器开发:关于QCef以及qcefview开发原理
  • 做技术,最忌讳东张西望
  • ChatGPT解答:python大批量读写ini文件时,性能很低,有什么解决方法吗,给出具体的思路和实例
  • Spring学习——MyBatisPlus入门
  • 极智AI | GPT4来了,ChatGPT又该升级了
  • JS学习第11天——函数进阶(this指向、严格模式、高阶函数、闭包、递归)
  • 一个nginx的小项目,不写代码,实现在局域网内访问其他电脑的网页
  • 裸辞3个月,面试了25家公司,终于找到心仪的工作了
  • C#基础之面向对象编程(二)
  • MySQL:JDBC
  • 快速测试两台服务器间的网速(ChatGPT回复)
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——MYSQL安全测试解析(详细)
  • 【linux】:进程概念
  • 08从零开始学Java之记事本怎么编写Java代码?