一起学习LeetCode热题100道(57/100)

news2024/11/14 3:22:55

57.电话号码的字母组合(学习)

给定一个仅包含数字 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’] 的一个数字。

解析:
一、定义映射表:
1.首先,我们定义了一个名为digitMap的对象,它包含了从数字到对应字母列表的映射。这是基于电话按键的映射关系。

二、初始化结果数组:
1.我们创建了一个名为result的空数组,用于存储所有生成的字母组合。

三、定义递归函数backtrack:
这个函数是解决方案的核心。它接受两个参数:
1.combination:当前已经生成的字母组合(字符串形式)。
2.nextDigits:尚未处理的数字字符串。
函数的工作流程如下:
1.基准情况:如果nextDigits为空,说明我们已经处理了所有的数字,此时将combination添加到result数组中。
2.递归步骤:如果nextDigits不为空,我们执行以下操作:
2.1.取出nextDigits的第一个数字(digit),并查找它在digitMap中对应的字母列表(letters)。
2.2.遍历letters中的每个字母(letter),执行以下操作:
2.2.1将letter添加到combination的末尾,形成新的组合。
2.2.2递归调用backtrack函数,传入新的组合和nextDigits中除了第一个数字之外的部分(通过slice(1)实现)。
2.2.3递归返回后,我们需要撤销上一步的选择,即移除刚刚添加到combination中的letter。但在这个特定的实现中,由于JavaScript的字符串是不可变的,我们实际上是通过创建新的字符串来“撤销”的,因为每次递归调用都会传入一个新的combination字符串。

四、处理边界情况:
1.如果输入的digits字符串为空,我们直接返回空数组,因为没有数字就没有字母组合。

五、启动递归:
1.我们调用backtrack函数,传入空字符串作为初始的combination,以及输入的digits字符串作为nextDigits。

六、返回结果:
1.递归完成后,result数组将包含所有可能的字母组合,我们将其返回作为最终结果。

var letterCombinations = function (digits) {
    // 映射表  
    const digitMap = {
        '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']
    };

    // 结果数组  
    const result = [];

    // 递归函数  
    const backtrack = (combination, nextDigits) => {
        // 如果已经处理了所有数字,则将当前组合添加到结果中  
        if (nextDigits.length === 0) {
            result.push(combination);
        } else {
            // 获取当前处理的数字对应的字母列表  
            const digit = nextDigits[0];
            const letters = digitMap[digit];

            // 遍历字母列表,进行递归  
            for (let letter of letters) {
                backtrack(combination + letter, nextDigits.slice(1));
            }
        }
    };

    // 如果输入为空字符串,则直接返回空数组  
    if (digits.length === 0) {
        return result;
    }

    // 调用递归函数,初始组合为空字符串,初始数字为输入的字符串  
    backtrack('', digits);

    return result;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ETL数据集成丨实现SQLServer数据库的高效实时数据同步

SQL Server&#xff0c;作为一款功能强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;在企业级应用中占据着举足轻重的地位。它不仅提供了可靠的数据存储与管理能力&#xff0c;还集成了高级数据分析、报表服务、集成服务以及商业智能等功能&#xff0c;为…

如何使用 500 多个表构建企业级 AI 查询向导

迄今为止的旅程&#xff1a;Confluence Agent 回顾 在深入研究 SQL Agent 之前&#xff0c;让我们先简单回顾一下我们开发的 Confluence Agent&#xff1a; 元数据提取&#xff1a;捕获我们的知识库的结构。内容提取&#xff1a;提取文档的核心内容。格式处理&#xff1a;分离 …

台灯应该买什么样的才能护眼?适合孩子的护眼台灯挑选指南

2022年3月1日起&#xff0c;正式实施的《儿童青少年学习用品近视防控卫生要求》&#xff08;GB 40070-2021&#xff09;规定了与近视防控相关的读写作业台灯卫生要求。台灯应该买什么样的才能护眼&#xff1f;要求从照度、均匀度、显色指数、色温、防蓝光等方面去完善护眼台灯&…

如何利用 Go 语言开发高可用服务

高可用的含义是尽量减少服务的不可用&#xff08;日常维护或者突发系统故障&#xff09;时长&#xff0c;提升服务的可用时长。如何衡量一个服务的可用性呢&#xff1f;或许你也听说过&#xff0c;通常企业可能会要求服务的可用性能能够达到三个 9(也就是 99.9%)或者 4个 9 &am…

手机三要素验证API接口,选择的时候应该注意什么?

在选择手机三要素验证API接口时&#xff0c;为了确保接口的安全性、可靠性和适用性&#xff0c;需要注意以下几个方面&#xff1a; 服务商的合法性和资质 合法性&#xff1a;确保服务商具有合法的经营资质和业务范围&#xff0c;以避免法律风险。 资质认证&#xff1a;查看服务…

运维的理解、定位及其在现代企业中的重要性

在当今数字化转型的大潮中&#xff0c;运维&#xff08;Operation & Maintenance, O&M&#xff09;作为企业IT架构中不可或缺的一环&#xff0c;其角色与职责正经历着深刻的变革。运维不再仅仅是技术层面的支持与维护&#xff0c;而是逐渐演变为一种集技术支持、业务服…

ORM框架:Mybatis与Hibernate

认识ORM ORM, Object-Relationl Mapping&#xff0c;对象关系映射。它的作用是在关系型数据库和对象之间作一个映射。 可以在对象模型和关系型数据库的表之间建立一座桥梁&#xff0c;程序员使用 API 直接操作 JavaBean 对象就可以实现数据的存储、查询、更改和删除等操作。 常…

okhttp异步请求连接阻塞问题排查

表现&#xff1a; 使用okhttp请求外部大模型接口时&#xff0c;当并发在2-5左右&#xff0c;出现请求被阻塞在建立http连接之前&#xff0c;阻塞时间超长&#xff08;>20s&#xff0c;从日志看有160s存在&#xff09;。但是httpconfig的connTimeout时间配置为100s&#xff…

在线客服系统PHP源码免费开源 (搭建教程+全新UI)

安装环境 宝塔面板 php>8.0 mysql5.7 安装搭建 1.建站点 上传程序 2.建数据库 导入数据 3.网站目录/public 伪静态设置 4.修改数据库配置信息 5.修改config.js里的配置信息 6.启动wokerman命令 更详细的搭建教程请下载源码根目录下 安装教程.docx 产品亮点: …

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

生信之家:生物信息学爱好者的温馨交流与科研合作社区

介绍 在生物信息学这个迅速发展的领域&#xff0c;交流与合作显得尤为重要。生信之家正是为此而生的&#xff0c;它是一个专为生物信息学研究人员、学生以及爱好者打造的在线社区。在这里&#xff0c;用户可以分享知识、讨论技术、寻找解决方案&#xff0c;并与来自全球的同行…

页面卡顿检测方案

引言 卡顿现象在早期的开发项目中是一个非常值得注意的问题。随着应用功能的不断增加&#xff0c;代码复杂度也在不断提升&#xff0c;特别是在较为低端的机型上&#xff0c;稍有不慎就可能引发卡顿现象。虽然近年来新发布的设备性能显著提升&#xff0c;但卡顿问题仍然不容忽…

kettle定时发送邮件功能怎样集成到系统中?

kettle定时发送邮件的配置步骤&#xff1f;如何设置kettle发信&#xff1f; kettle不仅能够及时通知相关人员数据处理的状态&#xff0c;还能确保系统的自动化和高效运作。AokSend将详细探讨如何将kettle定时发送邮件功能无缝集成到系统中&#xff0c;让您的数据处理流程更加智…

idea2024设置中文

今天下载idea2024.2版本&#xff0c;发现已经装过中文插件&#xff0c;但是还是不显示中文&#xff0c;找了八天原来还需要设置中文选项 方案一 点击文件 -> 关闭项目 点击自定义 -> 选择语言 方案二 点击文件 -> 设置 外观与行为 -> 系统设置 -> 语言和地区…

C语言迷宫制造

目录 开头程序程序的流程图程序的效果我推荐要制造的迷宫下一篇博客要讲的东西 开头 大家好&#xff0c;我叫这是我58。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> void printmaze(const cha…

android关于binder的简单通信过程

文章目录 简述aidl文件服务端的实现客户端的实现验证过程 简述 主要实现的是两个应用之间跨进程通信的过程&#xff0c;client端调用server端的具体实现&#xff0c;然后server端给client回调数据&#xff0c;详细如下所示 aidl文件 以下的文件需要在服务端与客户端都配置一…

使用极狐GitLab进行K3S集群的维护与控制

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门面向中国程序员和企业提供企业级一体化 DevOps 平台&#xff0c;用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规&#xff0c;而且所有的操作都是在一个平台上进行&#xff0c;省事省心省钱。可以一键安装极狐GitL…

企业图纸防泄密怎么做?10款好用的图纸加密软件推荐

在当今竞争激烈的市场环境中&#xff0c;企业图纸作为核心技术和商业机密的重要组成部分&#xff0c;其安全性直接关系到企业的竞争力和市场地位。因此&#xff0c;采取有效措施防止图纸泄密至关重要。本文将探讨企业图纸防泄密的综合策略&#xff0c;并推荐10款优质的图纸加密…

工业企业能源管理系统

进入新世纪以来&#xff0c;我国的社会主义市场经济持续繁荣&#xff0c;在经济发展的同时&#xff0c;能源耗费量与日俱增&#xff0c;在很大程度上阻碍了我国经济的可持续发展。为了实现节能减排的目标&#xff0c;大量企业进行了产业结构调整和优化升级&#xff0c;促进了资…

OpenAI Embeddings API: How to change the embedding output dimension?

题意&#xff1a;OpenAI Embeddings API&#xff1a;如何更改嵌入输出维度&#xff1f; 问题背景&#xff1a; In the official OpenAI node library Create embeddings if for example using the model text-embedding-ada-002 the embeddings returned is an array of aroun…