电话号码的字母组合

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

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

示例 1:

复制代码
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

复制代码
输入:digits = ""
输出:[]

示例 3:

复制代码
输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。

JavaScript 的函数执行机制

  • 函数会一直执行到遇见 return 或执行完所有语句

  • 没有 return 的函数默认返回 undefined

  • 在递归中,不恰当的继续执行会导致调用栈堆积

参数详解:

1.index 参数

作用:表示当前正在处理输入数字字符串中的第几个数字,从0开始计数

2.current 参数

作用:累积当前已生成的字母组合字符串

思考:

Q:为什么不用 for...in

A:for...in 用于遍历对象属性,字符串遍历应用 for...of

代码实现:

javascript 复制代码
/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function (digits) {
    // 处理空输入情况
    if (digits.length === 0) {
        return [];
    }
    // 数字字母映射表
    const digitToLetters = {
        '2': 'abc',
        '3': 'def',
        '4': 'ghi',
        '5': 'jkl',
        '6': 'mno',
        '7': 'pqrs',
        '8': 'tuv',
        '9': 'wxyz'
    };
    const result = [];
    // 定义回溯函数,递归生成所有组合
    function backtrack(index, current) {
        // 当处理完所有数字时终止
        if (index === digits.length) {
            result.push(current);
            return; // 结束当前递归分支
        }
        // 获取的数字对应的字母字符串
        const letters = digitToLetters[digits[index]];
        // 遍历当前数字对应的每个字母
        for (const letter of letters) {
            // 递归调用,处理下一个数字,并将当前字母添加到组合中
            backtrack(index + 1, current + letter);
        }
    }
    // 调用回溯函数:从第0个数字和空字符串开始
    backtrack(0, '');
    return result;
};
相关推荐
ytttr8738 分钟前
基于 C# WinForm 实现的 电影院售票系统
开发语言·c#
vi1212313 分钟前
土壤与水分遥感反演技术综述:原理、方法与应用
人工智能·算法·无人机
智者知已应修善业16 分钟前
【蓝桥杯龟兔赛跑】2024-2-12
c语言·c++·经验分享·笔记·算法·职场和发展·蓝桥杯
Tisfy21 分钟前
LeetCode 955.删列造序 II:模拟(O(mn)) + 提前退出
算法·leetcode·字符串·题解·遍历
CC码码22 分钟前
告别杂乱数字:用 Intl.NumberFormat 打造全球友好的前端体验
前端·javascript·面试
Tony Bai23 分钟前
Goroutine “气泡”宇宙——Go 并发模型的新维度
开发语言·后端·golang
im_AMBER27 分钟前
Leetcode 82 每个字符最多出现两次的最长子字符串 | 删掉一个元素以后全为 1 的最长子数组
c++·笔记·学习·算法·leetcode
kandee31 分钟前
vscode混淆js文件的插件用法(jshaman)
javascript·ide·vscode
java修仙传31 分钟前
力扣hot100:旋转排序数组中找目标值
算法·leetcode·职场和发展
式51632 分钟前
量子力学基础(二)狄拉克符号与复数向量空间
人工智能·算法·机器学习