电话号码的字母组合

电话号码的字母组合

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

示例#

Copy
输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

题解#

Copy
/** * @param {string} digits * @return {string[]} */ var letterCombinations = function(digits) { var n = digits.length; var target = []; if(!n) return target; var map = { "2": "abc", "3": "def", "4": "ghi", "5": "jkl", "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz" }; var dfs = function(i, tmp){ if(i === n) { target.push(tmp); return void 0; } var unit = map[digits[i]]; Array.prototype.forEach.call(unit, v => dfs(i+1,`${tmp}${v}`)); } dfs(0, ""); return target; };

思路#

回溯法,对于输入可以构成一棵树,然后采用回溯法遍历这棵树,即可获得所有的字母组合,首先定义n作为输入的按键的长度,然后定义目标数组,如果按键长度为0则直接返回空数组,定义一个map作为按键与字母的映射,之后定义一个dfs深度递归,如果当前递归的位置i与按键输入长度相同,则将拼接的字符串置入target数组并结束递归,之后获取按键的所有字符,之后遍历这个字符串,将其拼接到已有字符串之后再向下递归并传递当前树的深度以及拼接后的字符串,之后开始启动递归,递归完毕后将目标数组返回即可。

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

参考#

Copy
https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/
posted @   WindRunnerMax  阅读(238)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS