博客
关于我
电话号码的字母组合
阅读量:401 次
发布时间:2019-03-06

本文共 1158 字,大约阅读时间需要 3 分钟。

电话号码的字母组合

给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。

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

示例

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

题解

/** * @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数组并结束递归,之后获取按键的所有字符,之后遍历这个字符串,将其拼接到已有字符串之后再向下递归并传递当前树的深度以及拼接后的字符串,之后开始启动递归,递归完毕后将目标数组返回即可。

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

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

转载地址:http://lvckz.baihongyu.com/

你可能感兴趣的文章
java 多态类型转换
查看>>
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
查看>>
HTML 和 CSS 简单实现注册页面
查看>>
趣谈win10常用快捷键
查看>>
IDEA出现问题:Received fatal alert: protocol_version 解决方案
查看>>
Airtest自动化测试 Docs airtest.core.android package
查看>>
11.2.6 时间值的小数秒
查看>>
Redis源码分析(七)--- zipmap压缩图
查看>>
【MySQL】(九)触发器
查看>>
Oracle 11G环境配置
查看>>
【Python】(十二)IO 文件处理
查看>>
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
查看>>
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
查看>>
C语言的数值溢出问题(上)
查看>>
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
android:使用audiotrack 类播放wav文件
查看>>
聊聊我的五一小假期
查看>>
数据库三个级别封锁协议
查看>>
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
查看>>