原文:17. 电话号码的字母组合(力扣 面试题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-017/

题目:

难度:Middle

相关话题:字符串回溯算法

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

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

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。


思路:

回溯算法,对每一个数字上的每一个字母都要进行全排列处理。

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    if(digits==="")return []
    let alphArr=[null,null,'abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
    let len=digits.length
    let result=[]
    function bt(result,temp,len,digits,start){
        // console.log(temp)
        if(temp.length===len){
            result.push(temp)
            return
        }
        let cur=alphArr[digits[start]]
        for(let i=0;i<cur.length;i++){

            bt(result,temp+cur[i],len,digits,start+1)

        }
    }
    bt(result,'',len,digits,0)
    return result
};

扩展阅读: