力扣17题:电话号码的字母组合记录及讲解

202 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

力扣刷题记录及讲解

leetcode:17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

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

image.png

示例 1:

输入:digits = "23"

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

示例 2:

输入:digits = ""

输出:[]

示例 3:

输入:digits = "2"

输出:["a","b","c"]

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/le…


/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
    const nums = {
        2: ["a","b","c"],
        3: ["d","e","f"],
        4: ["g","h","i"],
        5: ["j","k","l"],
        6: ["m","n","o"],
        7: ["p","q","r","s"],
        8: ["t","u","v"],
        9: ["w","x","y","z"],
    }
    let strArr = [];
    function dfs (str, i) {
        // 获取到当前数字对应的字母数组
        const letterArr = nums[digits[i]];
        // 判断结束条件
        if( i > digits.length - 1 ) {
            return
        }
        // for of遍历出每个字母
        for( let letter of letterArr ) {
            // 判断是否是最后一次,是的话添加至结果数组中
            if( i === digits.length - 1 ) {
                strArr.push(str + letter)
            }
            // 把当前结果比如第一遍遍历出a,b,c然后把a,b,c分别代入dfs中进入下一次遍历,
            // 这样下一次的字母就会分别与a,b,c相结合,然后再进入下一次dfs,直到i === digits.length - 1添加至结果数组
            dfs(str + letter, i+1);
        }
    }
    dfs("", 0);
    return strArr
};