给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。。。。

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 思路:利用回溯法,找到第一个数字,对应的字符串,然后依次遍历,并且递归调用回溯方法。 class Solutio... 阅读详情

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

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

示例:

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

关键字:树

1、初始化一个数据为“”的节点作为根节点(root节点),然后将每个数字对应的,每一个字符创建为一个新的节点,放在同一个父节点下,并且要循环执行父节点层节点数次(如:父节点层有3个节点,那么要循环执行3次,每个节点下都有相同的节点)。

2、遍历树,根节点到叶节点的节点数据为一个组合方式

 

 

 

public class Test {

    private Node root = new Node("");

    public List<String> letterCombinations(String digits) {
        List<String> result = new ArrayList<>();

        if (digits == null || digits.length() == 0) {
            return result;
        }

        char[] chars = digits.toCharArray();
        List<List<String>> lists = new ArrayList<>();
        for (char c : chars) {
            lists.add(char2String(c));
        }


        //生成树
        tree(root, lists, 0);

        return ergodicTree(root);
    }

    //用于临时存储路径
    private StringBuilder sb = new StringBuilder();
    private List<String> res = new ArrayList<>();

    /**
     * 遍历树
     *
     * @param tree
     * @return
     */
    private List<String> ergodicTree(Node tree) {

        getCode(tree, tree.c, sb);
        return res;
    }

    private void getCode(Node node, String str, StringBuilder sb) {

        StringBuilder stringBuilder = new StringBuilder(sb);
        stringBuilder.append(str);

        if (node.nodes.size() > 0) {
            for (Node n : node.nodes) {
                getCode(n, n.c, stringBuilder);
            }
        } else {
            res.add(stringBuilder.toString());
        }

    }

    private void tree(Node node, List<List<String>> lls, int index) {

        List<String> cl = lls.get(index);
        for (String c : cl) {
            node.nodes.add(new Node(c));
        }
        index++;
        if (index < lls.size()) {
            for (Node n : node.nodes) {
                tree(n, lls, index);
            }
        }


    }


    private static List<String> char2String(char c) {
        List<String> characters = null;
        switch (c) {
            case '1':
                characters = Arrays.asList("");
                break;
            case '2':
                characters = Arrays.asList("a", "b", "c");
                break;
            case '3':
                characters = Arrays.asList("d", "e", "f");
                break;
            case '4':
                characters = Arrays.asList("g", "h", "i");
                break;
            case '5':
                characters = Arrays.asList("j", "k", "l");
                break;
            case '6':
                characters = Arrays.asList("m", "n", "o");
                break;
            case '7':
                characters = Arrays.asList("p", "q", "r", "s");
                break;
            case '8':
                characters = Arrays.asList("t", "u", "v");
                break;
            case '9':
                characters = Arrays.asList("w", "x", "y", "z");
                break;


        }
        return characters;
    }

    private class Node {

        String c;
        List<Node> nodes;

        public Node(String c) {
            this.c = c;
            nodes = new ArrayList<>();
        }

    }
}

 

 

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

相关推荐

LeetCode第17题解析

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

blue_coffeei的博客 992

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

题目 给定一个仅包含数字 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.l

男儿不展风云志,空有天生八尺躯 4780

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

偶然碰到这个题,苦思冥想一顿凑出来了,待验证…… //调用方法 node 文件名.js 23 //例 node test.js 23 //结果 [ 'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf' ]; //此题规律是输入数据多长,每一个结果就有几位,从第一位至最后一位,所以一层一层计算 //即先求['a','a','a','b','b','...

Gmaomua的博客 2524

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

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

kaiser king的博客 4167

电话号码的字母组合算法讲解

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

ly1379223878的博客 1376

17.实现一个算法根据电话按键上的数字和字母的映射关系,输入一个或多个数字返回所有它能表示的全部字母组合

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

yonggeit的博客 3146

给定一个仅包含数字 2-9 的字符串,返回所有它在手机键盘上能表示的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它在手机键盘上能表示的字母组合 用于自己学习记录,思路如下: 1、定义一个List1用于存放已经排列组合好的数据。 2、再用这个定义好的List1与另外一个List2做组合,组合后的结果再给List1。 // An highlighted block package com.hlt.autotest.test; import java.util.*; public class Algorithm { public static Map<Stri

weixin_42274444的博客 1196

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3409

给定数字字符串,返回字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 例:输入“23” 输出 :[ ad, bd, cd, ad, ae, af, bd, be, bf, cd, ce, cf] 分析: 首先用switch case语句将数字和该数字对应 的字母表示出来。 然后再给定一个字符串。每次向里面添...

weixin_42373873的博客 1818

别再死磕文档了!用国产MBSES软件5分钟上手MBSE建模(保姆级图文教程)

本文通过国产MBSES软件,详细演示了如何在5分钟内完成智能家居系统的MBSE建模。从模块图定义到状态机图构建,再到参数约束验证,全程图文指导,帮助工程师快速掌握基于模型的系统工程方法,显著提升复杂系统设计效率。

weixin_26833503的博客 237

睿尔曼超轻量仿人机械臂--机械臂接口介绍

本文介绍了睿尔曼超轻量仿人机械臂的控制器接口及末端接口。

realman_Rop的博客 3437

【LeetCode】电话号码的字母组合

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

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1154

手把手教你学Simulink--基础储能管理场景实例:基于Simulink的扩展卡尔曼滤波(EKF)SOC估计算法仿真

本文介绍了基于Simulink的扩展卡尔曼滤波(EKF)在电池SOC估算中的应用。通过Thevenin等效电路建立非线性电池模型,详细阐述了EKF的状态预测和更新过程。在Simulink中搭建了完整的仿真系统,包括电池模型、EKF核心算法模块和误差分析模块。通过脉冲放电和变电流充放电两种工况测试,验证了EKF算法在短期误差(<0.8%)、长期累积误差(<1.5%)和动态响应时间(30ms)方面的优越性能,相比传统安时积分法显著提高了估算精度。文章还提出了自适应EKF、多模型融合等进阶优化方向,为

MHD0815的博客 99

电话号码的字母组合

通过不断地动态更新结果列表,逐步构建所有可能的字母组合。这种方法避免了使用递归,而是利用迭代和动态更新来解决问题,提高了效率和可控性。​​​​​​​以下是完整代码

2301_80661536的博客 1116

自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用

本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 88万+

【保姆级教程】基于UNet++&MobileNetv2的语义分割模型从训练到RK3588部署:让边缘AI落地效率提升300%

通过SMP库一键构建encoder_name="mobilenet_v2", # 选择MobileNetv2作为骨干encoder_weights="imagenet", # 加载预训练权重加速收敛in_channels=3, # 输入图像通道数(RGB)classes=29, # Cityscapes数据集类别数activation=None # 输出无激活,便于后续损失计算本教程从“模型设计-训练-转换-边缘部署”全链路拆解了。

FJN110的博客 210

【leetcode C++】电话号码的字母组合

用 C++ 讲解 leetcode 电话号码的字母组合

2301_79789645的博客 2489

从4A架构的角度出来 帮我分析一下:数字化转型深水区:企业架构如何成为价值重构的核心引擎?

4A 架构的本质是构建企业的数字神经系统,通过业务感知、数据传输、决策执行、技术支撑的闭环,实现从效率提升到生态重构的质变。正如华为通过该架构实现全球研发资源统一调度,某零售集团借此打造线上线下融合的新零售体系,当业务、数据、应用、技术四个维度形成共振时,企业将获得持续进化的数字免疫力,在不确定的市场环境中保持韧性生长。这一过程不仅需要技术工具的升级,更依赖组织文化的变革 —— 从 “部门墙” 到 “能力网” 的转型,才是数字化转型深水区的终极挑战。

金牌架构师 1044

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

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

福大大架构师每日一题 2万+

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

题目描述 给定一个仅包含数字 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.len

учёба 1531

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python实现输出电话号码对应的字母组合

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

Mr_fengzi的博客 2315

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【LeetCode】 电话号码的字母组合 [C++]

题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 已知数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 解题思路: 1.若输入的字符串为空则直接返回。 if(index==digits.size()) ...

ly_6699的博客 1404

17. 电话号码的字母组合中

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。

yinhua405的博客 1390

C++ leetcode 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

一、解题思路 用map可以加快查询速度,DFS深度搜索,DFS是一种很常见的对于多循环或者n!的好的搜索算法. 二、代码:C++ void init(map<char, string> &mapDigit) { mapDigit.insert(pair<char, string>('2', "abc")); mapDigit.insert...

cysisu的博客 1058
上一篇: Android 支付宝SDK 6001 错误
下一篇: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
路过的5年
博客等级 码龄12年 4粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值