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

(回溯) LeetCode 17. 电话号码的组合

原题链接

一. 题目描述

17. 电话号码的字母组合

已解答

中等

相关标签

相关企业

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

二. 解题思路

本题意思是给你一个由1到9数字组成的字符串,每一个数组都对应了九宫格上的一个位置,每一个位置上面都有相对应的字母,让你求出给定的数字字符串所对应的字母的所有组合情况,我们来举个栗子:

 这是代码随想录中的一个例子(搬运工)。

通过上面的例子我们可以看出,这个和前面所做到的组合其实差不多,就是多了个数字和字母相对应的情况:

1. 我们首先得构造一个字符串数组,用来存储每一个数字和它对应的所有字母的映射关系。

2. 用字符串s 记录当前的组合,字符串数组res 记录结果,然后开始递归回溯

3. 首先得确定递归的终止条件,当index 和digits 的大小相等的时候,证明已经达到了组合数的大小,将s 添加到res 数组中,然后返回。

4. 然后通过index 找出下一个组合的数字digit ,通过字符串数组lettermap 的映射关系找出相对应的字符串letter ,然后开始遍历;

5. 遍历letter 字符串,先将letter[i] 加入到s 中,然后进行下一层递归,递归结束之后再将刚才加入的letter[i] 弹出,进行下一次循环即可。

注意:在执行递归的前提是带判断digits 是否为空,如果为空就直接进行输出即可,不用进行递归。

三. 代码

class Solution {
public:string lettermap[10] = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};string s;vector<string> res;void back(string digits, int index){if(index == digits.size()){res.push_back(s);return;}int digit = digits[index] - '0';string letter = lettermap[digit];for(int i = 0; i < letter.size(); i++){s.push_back(letter[i]);back(digits, index + 1);s.pop_back();}}vector<string> letterCombinations(string digits) {if(digits.size() == 0){return res;}back(digits, 0);return res;}
};

四. 总结

本题也是一道训练递归好题目,建议练习

时间复杂度:O(N∗M)

空间复杂度:O(N∗M)

喜欢的话给个关注吧!!

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

相关文章:

  • Ghidra:开源软件逆向工程框架
  • Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持
  • java.util.ConcurrentModificationException 并发修改异常
  • Flask数据库操作(第四阶段)
  • C语言问答进阶--5、基本表达式和基本语句
  • uniapp3.0实现图片上传公用组件上传uni-file-picker,uni.uploadFile
  • Unity游戏开发002
  • MySQL基础练习题38-每位教师所教授的科目种类的数量
  • haproxy 原理+实战
  • OSPF进阶
  • SuccBI+低代码文档中心 — 可视化分析(仪表板)(下)
  • 前端创作纪念日
  • 丰收季遇科技之光:北斗卫星导航引领现代农业新篇章
  • 解决windows7虚拟机安装不了vmtools问题
  • Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1
  • uniapp获取swiper中子组件的内容高度
  • 基于计算机爱心小屋公益机构智慧管理(源码+论文+部署讲解等)
  • 详细学习PyQt5的样式表与界面美化
  • 遥控器android设备键值原理
  • 零基础也想学编程?Java零基础入门学习路线 + Java教程已准备好!
  • Avnet ZUBoard 1CG开发板上手—深度学习新选择
  • C/C++复习 day1
  • 再见Figma!!新的设计,代码协作神器!【送源码】
  • 快速拷贝复制工具软件@拷贝工具@多线程拷贝@robocopy
  • JavaScript 逆向爬取实战
  • Vue 项目中导入文件时如何默认找寻该文件夹下的 index.vue 文件
  • Idea2023.3.3 —— SourceTree与gitee关联
  • 一文HDMI (High-Definition Multimedia Interface)
  • 【HBZ分享】高并发下如何设计缓存来提升系统性能?
  • 【AI 绘画】 文生图图生图(基于diffusers)