前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >电话号码的字母组合

电话号码的字母组合

作者头像
WindrunnerMax
发布2020-08-27 12:17:40
4200
发布2020-08-27 12:17:40
举报
文章被收录于专栏:Czy‘s Blog

电话号码的字母组合

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

示例

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

题解

代码语言:javascript
复制
/**
 * @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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 电话号码的字母组合
    • 示例
      • 题解
        • 思路
          • 每日一题
            • 参考
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档