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

【算法】算法题解---电话号码的字符组合

算法名称

电话号码的字符组合

算法描述

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

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述
示例 1:

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

示例 2:

输入:digits = “”
输出:[]

示例 3:

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

算法分析

数字和字母的映射: 可以使用map或者定义一个二维数组,例如:string letterMap[10],来做映射,我这里定义一个二维数组,代码如下:

const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9
};

用回溯法解决for循环:
从下图中可以看出遍历的深度,就是输入"23"的长度,而叶子节点就是我们要收集的结果,输出[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]。

在这里插入图片描述

算法解析代码

var letterCombinations = function(digits) {//获取digits的长度const k = digits.length;//使用mapconst map = ["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"];//digits为空,则输出[]if(!k) return [];//当digits只有一个数字,则通过分割字符串的方式用map获得结果if(k === 1) return map[digits].split("");//定义函数function backtracking(n, k, a) {//当path的长度等于digits的长度,则匹配完毕,添加到res中if(path.length === k) {res.push(path.join(""));return;}//对digits相对应的数字所包含的字母进行递归添加到path中for(const v of map[n[a]]) {path.push(v);//进行递归backtracking(n, k, a + 1);path.pop();}}const res = [], path = [];//调用函数backtracking(digits, k, 0);//返回结果return res;
};

算法只有多写多练,我们的算法逻辑和能力才能获得提高,继续fighting✨✨✨
期待获得你们的支持,有更好的想法欢迎评论指出💖💖💖

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

相关文章:

  • 提高上限之数学学习——数制转换及MECE原则学习
  • 字符函数和字符串函数(下)——“C”
  • kafka docker 安装
  • SpringBean管理
  • 关于Vue3中reactive的意义
  • 平衡三进制
  • python爬取网站数据
  • CSS的三大特性
  • Linux-scheduler之负载均衡(二)
  • VScode第三方插件打开sqlite数据库
  • Kafka 监控
  • MultipartFile与File的互转
  • 数据结构与算法基础-学习-15-二叉树
  • 接口测试要测试什么?
  • 2023.03.12学习总结
  • 数据结构入门6-1(图)
  • 把C#代码上传到NuGet,大佬竟是我自己!!!
  • 解决前端“\n”不换行问题
  • Python打包成exe,文件太大问题解决办法(比保姆级还保姆级)
  • CSS弹性布局flex属性整理
  • 14个你需要知道的实用CSS技巧
  • 【Flutter从入门到入坑之四】构建Flutter界面的基石——Widget
  • 中职网络空间安全windows渗透
  • 普通二叉树的操作
  • Oracle:递归树形结构查询功能
  • MongoDB数据库性能监控详解
  • python不要再使用while死循环,使用定时器代替效果更佳!
  • 什么是接口测试?十年阿里测试人教你怎样做接口测试
  • 1.10-1.12 Makefile
  • Leetcode. 88合并两个有序数组