DFS专题:电话号码的字母组合

news2025/1/12 10:34:40

    DFS专题:电话号码的字母组合

题目链接: 17.电话号码的字母组合

参考题解: 代码随想录

题目描述

在这里插入图片描述

代码思路

将数字到字母的映射用字符串数组表示出来。然后利用回溯算法,解决n个for循环的问题,枚举出每一种符合要求的情况。

代码纯享版

class Solution {

    public List<String> list = new ArrayList();
    StringBuffer str = new StringBuffer();

    public List<String> letterCombinations(String digits) {
        String[] match = new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        int num = 0;
        if(digits.length() != 0 && digits != null){
            backtrack(digits, match, num);
        }
        return list;
    }

    void backtrack(String digits, String[] match, int num){
        
        if(num == digits.length()){
            list.add(str.toString());
            return;
        }

        String temp = match[digits.charAt(num) - '0'];

        for(int i = 0; i < temp.length(); i++){
            str.append(temp.charAt(i));
            backtrack(digits, match, num + 1);
            str.deleteCharAt(str.length() - 1);
        }
    }
}

代码逐行解析版

class Solution {

    public List<String> list = new ArrayList(); //用于记录所有字母组合
    StringBuffer str = new StringBuffer(); //记录某个字母组合

    public List<String> letterCombinations(String digits) {

        //形成数字到字母的映射
        String[] match = new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; 
        int num = 0; //用于判断要映射digits的第几个数字
        if(digits.length() != 0 && digits != null){
            backtrack(digits, match, num); //回溯
        }
        return list;
    }

    void backtrack(String digits, String[] match, int num){
        
        //当两者相等时,说明已经形成一个符合要求的字母组合
        if(num == digits.length()){ 
            list.add(str.toString()); //将字母组合加入list中
            return;
        }

        //temp用来表示当前digits第num位数字所映射到的字母
        String temp = match[digits.charAt(num) - '0']; 

        
        for(int i = 0; i < temp.length(); i++){ //循环遍历当前数字下的每一种字母情况
            str.append(temp.charAt(i)); //将字母添加到字符串str中
            backtrack(digits, match, num + 1); //递归到下一个数字位
            str.deleteCharAt(str.length() - 1); //回溯,删掉最后一个字母
        }
    }
}

代码有关问题的解释

能不能将backtrack(digits, match, num + 1); 改为

num++;
backtrack(digits, match, num);

答:不能。这样会导致num在循环中重复加很多次,导致递归时出现问题。

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

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

相关文章

C++友元命名空间数据类型内联重载缺省

1.友元 &#xff08;1&#xff09;全局函数作为友元 利用友元这个语法&#xff0c;我们可在函数里访问类里面定义的私有成员&#xff1b; 先定义了一个默认构造函数对类里面的成员进行初始化&#xff1b;goodgay是一个全局的函数&#xff0c;我们想要直接打印私有成员变量就…

订单到期关闭如何实现

在电商、支付等系统中&#xff0c;一般都是先创建订单&#xff08;支付单&#xff09;&#xff0c;再给用户一定的时间进行支付&#xff0c;如果没有按时支付的话&#xff0c;就需要把之前的订单&#xff08;支付单&#xff09;取消掉。这种类似的场景有很多&#xff0c;还有比…

仓库管理系统哪个好用?看仓储出入库系统如何智慧管理库存-亿发

企业中的仓库扮演着至关重要的角色&#xff0c;负责产品的存储和分发。作为物流的重要节点&#xff0c;仓库不仅需要确保产品安全存放&#xff0c;还要保证及时的配送服务。同时&#xff0c;仓库还需要完成货物信息记录、库存管理和品质管理等任务。因此&#xff0c;仓储管理的…

DFS专题:二叉树的最大深度

力扣题目&#xff1a;二叉树的最大深度 题目链接: 104.二叉树的最大深度 题目描述 代码思路 设置两个变量&#xff0c;max来记录最大值&#xff0c;sum来记录路径的节点数量。利用dfs对二叉树进行搜索&#xff0c;遇到节点&#xff0c;则sum1&#xff1b;遇到叶子节点&#…

数据恢复如何工作?电脑最佳数据恢复软件分析

数据丢失是数字世界不合适的部分&#xff0c;迟早会影响许多计算机用户。 如果您不小心 #delete 了重要的 #file&#xff0c;可能很难找回它并造成不必要的压力。 点击发推文 幸运的是&#xff0c;即使您没有备份已删除的文件&#xff0c;PC的数据恢复软件也可以帮助您恢复已…

昂科烧录器支持Nuvoton新唐科技的低功耗微控制器M482SIDAE

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Nuvoton新唐科技的低功耗微控制器M482SIDAE已经被昂科的通用烧录平台AP8000所支持。 M482SIDAE以Arm Cortex-M4F为核心&#xff0c;是带有DSP指令集的高效能低功耗微控制器。其…

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…

apipost、postman等工具上传图片测试flask、fastapi的文件api接口

参考&#xff1a;https://blog.csdn.net/qq_15821487/article/details/119354129 https://www.cnblogs.com/wyxjava/p/16076176.html 选择from-data&#xff0c;下拉选择file上传文件发送即可

【动态规划 区间dp 位运算】3117. 划分数组得到最小的值之和

本文涉及知识点 动态规划 区间dp 位运算 LeetCode3117. 划分数组得到最小的值之和 给你两个数组 nums 和 andValues&#xff0c;长度分别为 n 和 m。 数组的 值 等于该数组的 最后一个 元素。 你需要将 nums 划分为 m 个 不相交的连续 子数组&#xff0c;对于第 ith 个子数组…

vscode设置conda默认python环境,简单有效

本地conda 可能安装了各种环境&#xff0c;默认的vscode总是base环境&#xff0c;这时你想要在vscode调试python代码&#xff0c;使用默认的环境没有安装对应的包就会遇到报错解决这个问题的方法很简单ctrlshiftp 调出命令面板 再输入 select interpreter , 选择 python 选择解…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目&#xff0c;忽然发现有一个在实际开发中我们经常用到的功能&#xff0c;但是我没有正儿八经的玩过这个功能&#xff0c;那就是在Spring Boot中实现一个excel报表的导入导出功能&#xff0c;这篇博客&#xff0c;主要是围绕excel报表数据导入进行&am…

一例Mozi僵尸网络的挖矿蠕虫分析(workminer)

概述 这是一个Linux平台的挖矿蠕虫&#xff0c;使用了go和C混合编译而成&#xff0c;主要通过爆破SSH口令进行传播&#xff0c;属于Mozi僵尸网络。其中GO代码负责SSH相关的爆破传播&#xff0c;以及对Config的处理&#xff0c;C代码则负责处理加入Mozi P2P网络&#xff0c;拉取…

c++11 标准模板(STL)本地化库 - 平面类别(std::collate) - 定义字典序比较和字符串的散列(二)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字典序比较和字符串的散列 std::collate 类 std::collate 封…

Redis的Stream 和 实现队列的方式【List、SortedSet、发布订阅、Stream、Java】

Redis队列与Stream、Redis 6多线程详解 Redis队列与StreamStream总述常用操作命令生产端消费端单消费者消费组消息消费 Redis队列几种实现的总结基于List的 LPUSHBRPOP 的实现基于Sorted-Set的实现PUB/SUB&#xff0c;订阅/发布模式基于Stream类型的实现与Java的集成 消息队列问…

MySQL高级(索引-性能分析-profile)

show profiles 能够在做SQL优化时帮助我们了解时间都耗费到哪去了。通过 have_profiling参数&#xff0c;能够看到当前MySQL 是否支持 profile 操作&#xff1a; select have_profiling 默认 profiling 是关闭的 select profiling; 可以通过 set 语句在 session / global 级…

【python】flask操作数据库工具SQLAlchemy,详细用法和应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

萌新_1 环境安装(基于QQNT框架 Python Flask)

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 一&#xff1a;安装QQ 目前为开发&#xff0c;推荐都安装到一台电脑上 直接安装到本地windows电脑&#xff0c; 优点方便开发 一键安装 Windows 用户一键安装方案 https://github.com/super1207/install_llob/rel…

从零到一品牌电商私域流量代运营规划方案

【干货资料持续更新&#xff0c;以防走丢】 从零到一品牌电商私域流量代运营规划方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT共50页&#xff08;完整资料包含以下内容&#xff09; 目录 私域运营方案&#xff1a; 一、项目背景与目标 - 开创数智化…

kaggle电子邮件分类xgboost建模可视化模型评估混淆矩阵范例

目录 概述 依赖环境 代码解读 库的导入 数据读取 扇形图可视化统计 词云图可视化 分布条形图可视化 数据预处理 划分数据集 模型训练 模型预测和评估 ROC曲线评估 混淆矩阵评估 多维度交叉评估 配套源码和数据集 xgboost邮件分类配套数据集和源码下载地址 概述…

RK3568 学习笔记 : u-boot 千兆网络功能验证

前言 开发板型号&#xff1a; 【正点原子】 的 RK3568 开发板 使用 虚拟机 ubuntu 20.04 编译 RK3568 Linux SDK&#xff0c;生成镜像&#xff0c;烧写后&#xff0c;Linux 系统正常启动 开启后可以使用 CTRLC 进入 u-boot 本篇验证一下 u-boot 下网络功能 【正点原子】 rk…