• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
晴♡栀
帮助4

算法名称

电话号码的字符组合

算法描述

给定一个仅包含数字 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;
    //使用map
    const 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✨✨✨
期待获得你们的支持,有更好的想法欢迎评论指出💖💖💖

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfcciki
系列文章
更多 icon
同类精品
更多 icon
继续加载