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

leetcode17. 电话号码的字母组合

题目描述:

        给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

        

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

解题思路:

  • 创建一个指针数组numStrArr,存放每一个数字对应的字母序列,注意指针数组实际存放的是每一个序列首元素的地址。
  • 创建一个vector<string>对象v,用于返回所有可能的排列组合。
  • 创建一个string对象str,用来临时存放当前组合出的字符串。
  • 调用递归函数Combine,实现遍历每一个组合。

Combine递归函数解析:

  • 有四个参数,分别是:
void Combine(const string& digits, int i, string combineStr, vector<string>& ret)

        const string& digits:传过来要进行组合的数字的字符串。

        int i:遍历的深度,初始为0。也可以理解为数字字符串的下标。

        string combineStr:临时string对象,用来存放当前组合出的序列。

        vector<string>& ret:要返回的vector<string>对象。

  • 递归终止条件:
if (i == digits.size())
{ret.push_back(combineStr);return;
}

        如果遍历深度等于数字字符串的长度,说明遍历到最深的一层,先将当前的string对象添加到vector对象中,然后返回即可。

  • 获取当前深度的数字:
int num = digits[i] - '0';

        string对象中存储的是字符数字,要减去字符0才是整形数字。

  • 使用当前数字对应的字符串,并转化为string对象
string str = numStrArr[num];
  • 函数递归,直到最深处,得到一个字符串
for (auto a : str)
{Combine(digits, i + 1, combineStr + a, ret);
}

        

代码:

class Solution {const char* numStrArr[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 = numStrArr[num];for (auto a : str){Combine(digits, i + 1, combineStr + a, ret);}}vector<string> letterCombinations(const string& digits){vector<string> v;if (digits.empty()){return v;}string str;Combine(digits, 0, str, v);return v;}
};

http://www.lryc.cn/news/345654.html

相关文章:

  • 如何设计与管理一个前端项目
  • 【MQTT】mosquitto 的 “下载、交叉编译、使用” 详细教程,手把手搭建一个MQTT Broker
  • 用云手机打造海外社媒矩阵
  • 第 8 章 机器人平台设计之底盘实现(自学二刷笔记)
  • ✔ ★Java项目——设计一个消息队列(五)【虚拟主机设计】
  • ntfs文件系统的优势 NTFS文件系统的特性有哪些 ntfs和fat32有什么区别 苹果电脑怎么管理硬盘
  • Python Web框架Django项目开发实战:创建在线学习应用
  • 用得助全媒体呼叫中心,让AI落到实处帮品牌做营销
  • 【吃透Java手写】2-Spring(下)-AOP-事务及传播原理
  • Spring原理分析--获取Environment资源对象
  • Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer与fence机制(2)
  • 人民币数字和中文汉字转换
  • 07_Flutter使用NestedScrollView+TabBarView滚动位置共享问题修复
  • Java解决垂直鉴权问题(对垂直权限进行校验)
  • 【MySQL工具】pt-heartbeat
  • 实现vant的年月日时分秒组件
  • typescript 命名空间、装饰器
  • GPT问答SAP BW
  • 使用zdppy_amauth开发激活用户接口
  • c++ memset 指针示例
  • 24考研双非上岸武汉理工大学电子信息专硕,855考研经验
  • 使用KubeKey 快速交付k8s v1.28.8集群
  • nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL
  • 通俗的理解网关的概念的用途(四):什么是网关设备?(网络层面)
  • Spring JdbcTemplate实现自定义动态sql拼接功能
  • 第十一篇:操作系统新纪元:智能融合、量子跃迁与虚拟现实的交响曲
  • 【大数据】学习笔记
  • PHP 框架安全:ThinkPHP 序列 漏洞测试.
  • 厂家自定义 Android Ant编译流程源码分析
  • 基于springboot+vue+Mysql的体质测试数据分析及可视化设计