leetcode hot 100 电话号码的字母组合

在这里插入图片描述
在本题目中,要求我们根据给的数字字符串对应电话号码上的字母组合。所以我们需要建立起数字和电话上字母的对应关系。

然后,组合问题依旧采用回溯来做。首先我们需要确定一下参数,我们需要给的digits,然后还需要字母和数字对应关系的数组,然后我们还需要一个索引,来指向我们遍历的数字。比如,给的digits是‘23’,这个索引就依次指向2和3。

当我们的索引和给的digits的长度一致的时候,比如,digits是‘23’,长度就是2,也就是我们的索引index==2时,我们遍历也就结束了,这就是终止条件。注意,这里不能是index = digits.length()-1,因为这样的话是指向了最后一个字符,但这个字符的可能结果还没有遍历!

然后通过回溯的模板写代码即可。

本题中由于涉及到字符串,所以用了StringBuilder 。

class Solution {

    //设置全局列表存储最后的结果
    List<String> list = new ArrayList<>();

    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return list;
        }
        //初始对应所有的数字,为了直接对应2-9,新增了两个无效的字符串""
        String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        //迭代处理
        backTracking(digits, numString, 0);
        return list;

    }

    //每次迭代获取一个字符串,所以会设计大量的字符串拼接,所以这里选择更为高效的 StringBuild
    StringBuilder temp = new StringBuilder();

    //比如digits如果为"23",num 为0,则str表示2对应的 abc
    public void backTracking(String digits, String[] numString, int num) {
        //遍历全部一次记录一次得到的字符串
        if (num == digits.length()) {
            list.add(temp.toString());\\因为temp是存储字符串的容器,是StringBulider类型,需要转换成字符串
            return;
        }
        //str 表示当前num对应的字符串
        String str = numString[digits.charAt(num) - '0'];\\获取到当前字符,然后转换成数字类型
        for (int i = 0; i < str.length(); i++) {\\注意i是从0开始的,所以结束条件是i<str.length()
            temp.append(str.charAt(i));\\temp相当于之前的path链表,就是存放结果的一个容器
            //c
            backTracking(digits, numString, num + 1);
            //剔除末尾的继续尝试
            temp.deleteCharAt(temp.length() - 1);
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用IP爬虫代理提取数据的步骤是什么?爬虫代理IP怎么提高采集效率?

​​​​​ 一、使用IP爬虫代理提取数据的步骤 在使用爬虫代理IP提取数据之前&#xff0c;需要先了解数据来源和目标网站的结构。以下是一个基本的步骤&#xff1a;1.确定数据来源 首先需要确定要提取数据的网站或数据源&#xff0c;了解网站的结构、数据存储方式以及数据更新…

HTML - 介绍

一.简介 HTML&#xff0c;超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。我们可以使用HTML建立自己的WEB网站或特定页面。HTML运行在浏览器上&#xff0c;由浏览器解析。 ⚠️注意&#xff1a;HTML文件的后缀…

HTML以及CSS相关知识总结(二)

css文件写样式时建议遵循以下顺序&#xff1a; 1.布局定位属性:display/position/float/ear/visibility/overflow(建议display第一个写&#xff0c;毕竟关系到模式) 2.自身属性: width/height/margin/ padding /border/ background 3.文本属性: color/font / text-decoration/t…

区块链中分叉机制

在区块链中我们经常会听到分叉【fork】的概念&#xff0c;今天通过这篇文章来详细的介绍下分叉 什么是分叉 在介绍区块链的分叉机制中&#xff0c;我们以公有链来说明&#xff0c;公有链是去中心化的。任何协议的改变都是代价巨大的&#xff0c;因为全网那么多节点&#xff0…

国产GC6610应用于打印机,医疗器械等产品中,可替代TMC2208/2209/trinamic的参数分析

电机驱动芯片应用范围十分广泛&#xff0c;目前已经广泛应用于消费电子、电动工具、打印机、3D打印、安防监控、通信设备、汽车&#xff0c;以及工业控制等领域。据市场调研机构ResearchAndMarkets统计&#xff0c;2021年全球电机驱动芯片是市场规模为38.8亿美元&#xff0c;预…

uniapp小程序:内存超过2mb解决方法(简单)message:Error: 上传失败:网络请求错误 代码包大小超过限制。

分析&#xff1a;这种情况是代码文件内存超过2mb无法进行预览上传 解决方法&#xff1a; 1、Hbuilder中点击运行-->运行到小程序模拟器--->运行时是否压缩代码 2、在微信小程序中点击详情--->本地设置&#xff1a; 3、点击预览即可运行了

Java通过模板替换实现excel的传参填写

以模板为例子 将上面$转义的内容替换即可 package com.gxuwz.zjh.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.*; import java.util.HashMap; import java.util.Map; import java.io.IOException; impor…

vue3 常见的路由传参无刷新修改当前路由url带参

无刷新修改当前路由url带参 //tabs切换部分 <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane v-for"(item,index) in tagList" :label"item.title" :name"item.name…

4-4 D. 银行排队问题之单队列多窗口加VIP服务

题目描述 假设银行有K个窗口提供服务&#xff0c;窗口前设一条黄线&#xff0c;所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时&#xff0c;下一位顾客即去该窗口处理事务。当有多个窗口可选择时&#xff0c;假设顾客总是选择编号最小的窗口。 有些银行会给VIP客户以…

gitee仓库使用中的警告

当 Git 执行 git pull 命令时&#xff0c;有时候会出现类似下面的警告信息&#xff1a; warning: ----------------- SECURITY WARNING ---------------- warning: | TLS certificate verification has been disabled! | warning: ------------------------------------------…

计算机毕业设计 基于SpringBoot的线上心理咨询室系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Ceph分布式存储自动化运维平台开发实践

文章目录 1. 背景介绍1.1 什么是Ceph&#xff1f;1.1.1 Ceph的核心组件1.1.2 Ceph的优势 1.2 自动化运维的需求目标 2. 平台架构设计和组件版本2.1 平台架构设计2.2 组件版本2.3 模块划分&#xff08;已经脱敏处理&#xff09;2.3.1 当前版本V1.0支持功能2.3.2 前后端代码结构t…

勤学苦练“prompts“,如沐春风“CodeArts Snap“

前言 CodeArts Snap 上手一段时间了&#xff0c;对编程很有帮助。但是&#xff0c;感觉代码编写的不尽人意。 我因此也感到困惑&#xff0c;想要一份完整的 CodeArts Snap 手册看看。 就在我感觉仿佛"独自彷徨在这条悠长、悠长又寂寥的雨巷"时&#xff0c;我听了大…

Transformers Tutorial教程3-7

Introduction Transformers库的一个使用&#xff0c;用这个库就可以很轻松地去使用和训练自己的一个预训练语言模型。 outline 介绍什么是Transformers&#xff0c;为什么要用它 介绍一些比较常用的接口 最后会给出一个demo&#xff0c;帮助你们快速地入门 what is Transf…

重装Windows系统出现Windows无法安装到这个磁盘,选中的磁盘采用GPT分区

文章目录 1.问题描述2.问题解决 1.问题描述 重装Windows系统时&#xff0c;出现Windows无法安装到这个磁盘&#xff0c;选中的磁盘采用GPT分区这个提示 2.问题解决 1.shiftF10&#xff0c;打开命令行 2.输入&#xff1a;diskpart (打开分区工具) 3.输入&#xff1a;list di…

分享5款专注于实用功能的小众软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.视频播放——Potplayer ​ Potplayer是一款功能强大的视频播放软件&#xff0c;支持各种格式的视频文…

14:00面试,14:06就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Web10--jQuery进阶

1、DOM操作 1.1 操作内容 方法 描述 text() 获取/设置元素的标签体纯文本内容 html() 获取/设置元素的标签体超文本内容 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>操作内容</title><style>div{w…

easypoi导出Word中,表格分页时上边框丢失

问题具体描述: 使用easypoi导出的Word中包含一个表格&#xff0c;表格行数较多&#xff0c;需要分页显示&#xff0c;在分页后第一行的上边框部分丢失&#xff0c;显示不美观&#xff0c;具体如下: 解决: 对表格中每行都添加一个上边框&#xff0c;具体如下: XWPFDocument do…

【蓝桥杯冲冲冲】贪心算法进阶之删数问题

蓝桥杯备赛 | 洛谷做题打卡day17 文章目录 蓝桥杯备赛 | 洛谷做题打卡day17删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1我们的思路是这样的&#xff1a; 题解代码我的一些话 删数问题 题目描述 键盘输入一个高精度的正整数 N N N&#xff08;不超过 25…