算法--电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 解题思路: 我想的是按照树的dfs做,不知道怎么动手 打开评论区,先做出来再理解吧。 本题是一个电话号码组合的问题,或者说是一个 阅读详情

描述

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

示例

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

分析

以示例入手分析:
在这里插入图片描述

实现

private String letterMap[] = {
            " ",    //0
            "",     //1
            "abc",  //2
            "def",  //3
            "ghi",  //4
            "jkl",  //5
            "mno",  //6
            "pqrs", //7
            "tuv",  //8
            "wxyz"  //9
    };

    private ArrayList<String> res;

    public List<String> letterCombinations(String digits) {

        res = new ArrayList<String>();
        if(digits.equals(""))
            return res;

        findCombination(digits, 0, "");
        return res;
    }

    private void findCombination(String digits, int index, String s){

        if(index == digits.length()){
            res.add(s);
            return;
        }

        Character c = digits.charAt(index);
        String letters = letterMap[c - '0'];
        for(int i = 0 ; i < letters.length() ; i ++){
            findCombination(digits, index+1, s + letters.charAt(i));
        }

        return;
    }
电话号码的字母组合算法讲解 通过对“电话号码的字母组合”算法的深入讲解,我们了解了如何使用回溯法来解决这类组合问题,包括问题分析、算法思路、代码实现以及复杂度分析等方面。希望大家能够掌握这种解题方法,在面对类似的算法问题时能够游刃有余,不断提升自己的算法能力和编程水平。 阅读详情

相关推荐

电话号码的字母组合算法

通过以上算法和代码实现,我们可以找到给定数字串的所有可能的字母组合。这个算法的时间复杂度为 O(3^N * 4^M),其中 N 表示数字串中对应 3 个字母的数字的个数,M 表示数字串中对应 4 个字母的数字的个数。算法的空间复杂度为 O(N+M),用于存储结果列表和递归调用栈的空间。在主函数中,我们首先判断给定的数字串是否为空,如果为空则直接返回空列表。电话号码的字母组合是一个经典的算法问题,要求根据给定的数字串,输出所有可能的字母组合。在本文中,我将详细介绍如何实现这个算法,并提供相应的源代码。

StVariable的博客 201

leetcode刷题-[17]电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits = "23" 输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 示例 2: 输入:digits = "" 输出:[] 示例 3: 输入:digits = "2" 输出:["a","b","c"] 思路 题目中说的是组合,可以采用回溯法的方法来解答,但是有

俩只猴的博客 380

手把手教你用Simulink搭建PMSM FOC控制模型(附完整仿真文件下载)

本文手把手教你使用Simulink搭建完整的永磁同步电机(PMSM)磁场定向控制(FOC)仿真模型。内容涵盖从电机与逆变器建模、核心的坐标变换(Clark/Park变换)实现、电流环与速度环PID整定,到SVPWM调制与系统集成调试的全过程,并提供关键参数设置与实用调试技巧,帮助工程师快速掌握FOC的工程实现。

silver的专栏 862

java算法题每日多道十

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。如果至少一个数字的被选数量不同,则两种组合是不同的。请你将所有链表合并到一个升序链表中,返回合并后的链表。的字符串,返回所有它能表示的字母组合。给你一个链表数组,每个链表都已经按升序排列。排列,请你将其转换为一棵平衡二叉搜索树。,并以列表形式返回。给定一个不含重复数字的数组。中可以使数字和为目标数。对于给定的输入,保证和为。

shiboluobuding的博客 1113

立创开源:基于STM32F103与ADS1256的六维力传感器低成本实现方案

本文详细介绍了一种基于STM32F103微控制器与ADS1256高精度ADC的低成本六维力传感器实现方案。该方案通过3D打印的六梁弹性体结构结合应变片,将多维力信号转换为电信号,并由24位ADC进行高精度采集。文章涵盖了硬件选型、电路设计、嵌入式软件驱动及上位机数据可视化全流程,为机器人、精密测量等领域的爱好者提供了一个可复现的开源实践参考。

weixin_34718952的博客 388

一文速览:大模型语料构建与基础训练全流程实战指南

因为模型只有看到足够丰富、高质量的数据,才能真正学到“真本事”,展现出更强大的泛化能力,也就是能够在全新的场景和任务下,做出准确的推理和判断。我们日常做饭的时候,通常会先把买回来的菜仔细清洗干净,把坏掉的叶子、泥土、杂质等去除掉。同理,训练大模型的数据就像我们的食材,如果不干净,就会影响模型的学习效果,甚至训练出逻辑紊乱的模型。在大模型的世界里,有一句名言:“Garbage in, Garbage out”,翻译过来就是“垃圾输入,垃圾输出”,说白了,就是给模型喂的是什么数据,它学到的就是什么知识。

master_hunter的博客 1669

LeetCode17—电话号码的字母组合(java版)

题目描述: 标签:回溯算法 给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 代码: 思路分析:思路同 组合 和 组合总和Ⅲ 1、首先要建立map,找到数字2-9到字符串的映射。 2、递归结束条件,index == digits.length() 3、从左到右遍历,找到index指向数字映射的字符串长度 4、从上到下遍历,回溯 5、回溯之后需清理index对应...

qq_40840749的博客 476

2026软考中级-软件设计师笔记(送最新视频教程)

核心口诀:运控存输输(运算器、控制器、存储器、输入、输出)例题(2019年上半年):核心公式:数字签名流程:数字证书作用:死锁4个必要条件:死锁判断公式:处理策略:程序设计语言的四大核心成分:顺序表操作(时间复杂度):链表操作(时间复杂度):核心思想:频率高的字符用短编码,频率低的用长编码 → 最小化总编码长度构造步骤(贪心算法):前提:有序表(升序/降序) 步骤:时间复杂度:O(log₂n) 例:查找中核心思想:用哈希函数将关键字映射到存储位置 哈希冲突:不同关键字映射到同一位置 → 用链地址法或开放定址

36万+

17.电话号码的字母组合-LeetCode

给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

XUELEIQIANQIU的博客 672

Allegro如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层

在Allegro做PCB设计的时候,如果需要复制器件的位号到其它层是无法直接实现的,如果直接拷贝器件的位号的话,效果如下。但是Allegro的Cross Copy命令是支持复制任何属性的图形到其它层的,下面以复制器件位号和丝印外框为例说明。同样如果使用Z-copy命令,也是无法Z-copy text的,Finds下方texts是灰色的。如何使用Cross Copy命令快速复制器件的位号和丝印外形其他层。另外cap处可以选择线段的端点是圆形,八角形,或者方形的铜皮。拷贝C1013,出现的是C*

weixin_54787054的博客 2671

学Simulink——控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 528

算法 电话号码的字母组合

在算法领域,电话号码的字母组合是一个非常有趣的问题,它涉及到字符串处理、回溯算法等知识点。回溯算法通过递归地构建解空间树,并在每一步选择一个可能的候选解,直到构建出完整的解为止。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。通过上述讨论,希望读者能够对“电话号码的字母组合”这一问题有更深刻的理解,并能够在自己的项目中灵活运用相关知识和技术。一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身农奴把歌唱,专栏系列(点击解锁)

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1071

XSS漏洞之PDF生成:从XSS到服务端任意文件读取

XSS是最为常见的Web漏洞之一,多年来连续入选OWASP TOP10,相信大家都耳熟能详。 它是一种代码注入类的攻击,是一种客户端侧的攻击,攻击者通过在Web应用中注入恶意JavaScript代码,通过点击URL,最终在受害者浏览器端执行的一种漏洞。主要有反射型XSS、存储型XSS、基于DOM的XSS三类。XSS一些比较常规的危害大概有:重定向浏览器、窃取Cookie、浏览器劫持等。本文章侧重于发现XSS后的进一步利用。 主要介绍在某次实际测试过程中,发现XSS漏洞之后,如何进一步的利用,最终通过XSS达

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3778

算法-电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 这道题利用了回溯的思想,由于是不存在不可行的情况,直接穷举所有情况不需要剪枝操作。 package main import "fmt" var phoneMap map[string]strin...

1万+

Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载

本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 897

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

LeetCode算法题:电话号码的字母组合

本题通过回溯算法(Backtracking)高效地生成所有可能的字母组合。回溯算法利用递归的思想,在逐步构建字母组合的过程中,保持对状态的控制,直到所有可能的组合都生成完毕。该算法的时间复杂度较高,但适用于这类需要生成所有组合或排列的问题。

00后诚续缘 1199

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【力扣算法】17-电话号码的字母组合

题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 题解 无官方题解 先用暴力法做了...

ZeromaXHe的博客 610

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[LeetCode] 17. 电话号码的字母组合(回溯算法)

17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 解题思路: 看到组合排列之类的题,基本上想到的是用深度优先遍历中回溯算法解题,这个应该形成条件反射,然后视题目对算法时间的要求再考虑是否需要做剪枝操作。回溯算法的特征是,维护一条可伸缩的路径,比如我代码中使用的string out,然后在递归深入的时候push元素,在递归退出即回溯的时候,pop元素,回溯算法基本是按照这种方式解题的,然后剪

virgilshi的博客 501

LeetCode回溯算法组合问题——17.电话号码字母组合

再来看一下参数,因为回溯算法需要的参数可不像二叉树递归的时候那么容易一次性确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了。什么时候达到了终止条件,一般来说搜到叶子节点了,也就找到了满足条件的一条答案,把这个答案存放起来,并结束本层递归。给出数字到字母的映射如下(与电话按键相同)。的字符串,返回所有它能表示的字母组合。(3)回溯搜索的遍历过程。(2)回溯函数终止条件。...

w20001118的博客 1059

算法成长记:电话号码的字母组合

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 输入:digits = “23” 输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”] 输入:digits = “” 输出:[] 输入:digits = “2” 输出:[“a”,“b”,“c”] 这个题目看似不陌生,但是实现起来还是需要转换一下思想。 首先,我们需要把数字转换

qq_40409143的博客 203

算法——LeetCode17. 电话号码的字母组合

15.三数之和 原题链接 题目: 题解1(超时):暴力解法 主要思路: 使用三重for循环查找符合要求的三个数 class Solution { public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> lists = new ArrayList<List<Integer>>(); boo

知北行的博客 200

算法十七:电话号码的字母组合

一天一算法。

weixin_40741512的博客 363

经典算法电话号码的字母组合

1、题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 来源:力扣(LeetCod...

digitaluser的博客 941

【算法解谜】电话号码的字母组合:拨动数字,解锁文字密码

电话号码的字母组合”问题,要求我们根据电话按键上对应的字母(例如2对应ABC),将给定的数字字符串转化为所有可能的字母组合。这是一道典型的回溯问题,通过逐步尝试每一种可能的路径,最终收集所有合法的组合。

master_chenchen的博客 1137

算法训练 leetcode 17 题 电话号码的字母组合

回溯递归的 index 就是index+1,不用 让它变成 i+1,i+1 是 start_index,就是在循环它本身的时候,取除了它本身后面的值,这个是同一个集合从前往后取 不能重复的情况,而我们现在是两个独立的集合,互相组合,index 为1 的可以取到 下一个集合index 为1 的,就是上面图的例子。假设有两个数字,那就是有两份字符串,我们把一个字符串先作为 for 循环的变量,就是说这个决定了 树的宽度,然后,另外一个字符串看成是 递归里面的变量,这个是递归的深度。这里的index不需要去重。

Amy_au的博客 1169

回溯算法 4. 电话号码的字母组合

​循环,每一次递归(可以理解为拓展子树),从当前结点拓展每一个选择(拓展每一个子树,也就是取用当前数字的每一个对应字母,对应着拓展每一个的子树)代码中最好考虑这些异常情况,但题目的测试数据中应该没有异常情况的数据,所以我就没有加了。纵向遍历是递归,从当前数字的对应字母,进入下一个数字的对应字母;其中 m 是对应三个字母的数字个数,n 是对应四个字母的数字个数。​来获得当前的层,然后循环当前层的每一个子树,进行递归拓展。时间复杂度: O(3^m * 4^n),​解决,下标为对应的数字)

m0_49844155的博客 1169
上一篇: 2020-08-27问题记录
下一篇: 算法--加一
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值