当前位置: 首页 > news >正文

算法通关18关 | 回溯模板如何解决复原IP问题

        18关的前几篇文章看过之后,对回溯的模板问题基本解题思路就知道了,就是固定的for循环问题,外层for循环控制横向,递归控制纵向,还要考虑撤销操作和元素是否能被重复利用问题,重复利用的情景较少,只用注意撤销就行。

1. 复原IP地址

题目

经典题目,LeetCode93 有效IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用','分割。

  • 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245""192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

思路

写一个单独的方法来判断每个部分是否符合要求,

IP地址最多有4段,所以4也就是终止条件,因为需要手动添加小数点,用pointNum来表示小数点的数量,pointNum=3说明被分成4段。手动添加小数点,这要增加一个位置来存储,所以下一层递归startindex就要从i + 1,开始,其他的就是递归和回溯的过程,撤销就是将刚刚加入的分隔符删掉,并且pointNum也要减1,

代码

    public Boolean isVaild(String s, int start, int end){if (start > end){return false;}//0开头的不合法if (s.charAt(start) == '0' && start != end){return false;}int num = 0;for (int i = start; i <= end; i++) {//遇到非法数字不合法if (s.charAt(i) >'9' || s.charAt(i) < '0'){return false;}num = num * 10 + (s.charAt(i) - '0');if (num > 255){return false;}}return true;}List<String> result = new ArrayList<>();public List<String> restoreIPAddress(String s){//这个是ip特性决定的if (s.length() < 4 || s.length() > 12){return result;}backTrack(s,0,0);return result;}private void backTrack(String s, int startIndex, int pointNum) {if (pointNum == 3){//小数点为3时候,分割结束,//判断第四段是否合法,合法放入resul中if (isVaild(s,startIndex,s.length() - 1)){result.add(s);}return;}for (int i = startIndex; i < s.length(); i++) {if (isVaild(s,startIndex,i)) {//后面插入小数点s = s.substring(0, i + 1) + "." + s.substring(i + 1);pointNum++;//插入小数点之后下个位置的起始字符位置i+2backTrack(s, i + 2, pointNum);pointNum--;//撤销操作s = s.substring(0, i + 1) + s.substring(i + 2);//撤销小数点}else {break;}}}

相关文章:

算法通关18关 | 回溯模板如何解决复原IP问题

18关的前几篇文章看过之后&#xff0c;对回溯的模板问题基本解题思路就知道了&#xff0c;就是固定的for循环问题&#xff0c;外层for循环控制横向&#xff0c;递归控制纵向&#xff0c;还要考虑撤销操作和元素是否能被重复利用问题&#xff0c;重复利用的情景较少&#xff0c;…...

Layui快速入门之第五节 导航

目录 一&#xff1a;基本概念 导航依赖element模块 API 渲染 属性 事件 二&#xff1a;水平导航 常规用法&#xff1a; 三&#xff1a;垂直导航 四&#xff1a;侧边垂直导航 五&#xff1a;导航主题 六&#xff1a;加入徽章等元素 七&#xff1a;面包屑导航 ps&a…...

使用分支——Git Checkout

这篇文章写的挺好&#xff1b; https://zhuanlan.zhihu.com/p/465954849 这里要注意&#xff0c;git 新的命令&#xff0c;通过 git switch 切换分支&#xff0c;虽然git checkout 分支 还可以用&#xff1b; 游离状态的HEADS 在我们已经见识到git checkout命令对于分支的三…...

【2023】数据挖掘课程设计:基于TF-IDF的文本分类

目录 一、课程设计题目 基于TF-IDF的文本分类 二、课程设计设置 1. 操作系统 2. IDE 3. python 4. 相关的库 三、课程设计目标 1. 掌握数据预处理的方法&#xff0c;对训练集数据进行预处理&#xff1b; 2. 掌握文本分类建模的方法&#xff0c;对语料库的文档进行建模…...

java.lang.NoSuchMethodError: java.lang.reflect.Field.trySetAccessible()Z

java.lang.NoSuchMethodError: java.lang.reflect.Field.trySetAccessible()Z 将JDK升级为11即可。 File --Project Structure – SDK Location --Gradle Setting --Gradle JDK 选择11...

如何使用SQL系列 之 如何在MySQL中使用存储过程

引言 通常&#xff0c;当使用关系型数据库时&#xff0c;你直接在应用程序代码中发出单独的结构化查询语言(SQL)查询来检索或操作数据&#xff0c;如SELECT、INSERT、UPDATE或DELETE。这些语句直接作用于并操作底层数据库表。如果相同的语句或一组语句中使用多个应用程序访问同…...

用 Github Codespaces 免费搭建本地开发测试环境

如何丝滑地白嫖一个本地开发环境&#xff1f;怎么新建一个代码空间&#xff1f; 1&#xff1a;通过Github网页新建2&#xff1a;通过VSCode插件新建 为代码创建相应的开发测试环境 如何丝滑地白嫖一个本地开发环境&#xff1f; 使用Codespaces为开发者解决这样的痛点&#xf…...

PyTorch实战-实现神经网络图像分类基础Tensor最全操作详解(一)

目录 前言 一、PyTorch数据结构-Tensor 1.什么是Tensor 2.数据Tensor使用场景 3.张量形态 标量&#xff08;0D 张量&#xff09; 向量&#xff08;1D 张量&#xff09; 矩阵(2D张量) 3D 张量与高维张量 二、Tensor的创建 1. 从列表或NumPy数组创建 2. 使用特定的初始…...

第29章_瑞萨MCU零基础入门系列教程之改进型环形缓冲区

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

如何搭建一个react项目(详细介绍)

要搭建一个基本的 React 项目&#xff0c;你需要执行以下步骤。在开始之前&#xff0c;请确保你已经安装了 Node.js 和 npm&#xff08;Node 包管理器&#xff09;。 搭建一个React项目 1&#xff0c;创建项目目录2&#xff0c;初始化项目3&#xff0c;安装 React 和 ReactDOM4…...

ActiveMQ用法

ActiveMQ 和 JMS的关系&#xff1f; ActiveMQ是流行的开源消息中间件&#xff0c;JMS是Java平台定义的一种消息传递的标准。ActiveMQ实现了JMS规范&#xff0c;因此可以使用JMS API来与ActiveMQ进行交互。 JMS定义了一种标准的API。API包括了一些接口和类&#xff0c;用于创建…...

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区&#xff0c;应用可将位图保存&#xff08;或缓存&#xff09;在其中。 如果缓存了位图&#xff0c;在绘制位图时&#xff0c;TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快&#xff08;特…...

线性代数的本质(十)——矩阵分解

文章目录 矩阵分解LU分解QR分解特征值分解奇异值分解奇异值分解矩阵的基本子空间奇异值分解的性质矩阵的外积展开式 矩阵分解 矩阵的因式分解是把矩阵表示为多个矩阵的乘积&#xff0c;这种结构更便于理解和计算。 LU分解 设 A A A 是 m n m\times n mn 矩阵&#xff0c;…...

vue实现鼠标拖拽div左右移动的功能

直接代码&#xff1a; <template><div class"demo"><div class"third-part" id"发展历程"><div class"title">发展历程</div><div class"content" id"nav" v-if"dataList…...

基于Python和mysql开发的商城购物管理系统分为前后端(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的商城购物管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过…...

MySQL内外连接、索引特性

目录 内连接 外连接 索引特性 理解索引 删除索引 MySQL内外连接是一种用于联接两个或多个表的操作。内连接只返回满足连接条件的行&#xff0c;外连接返回满足条件和不满足条件的行。 内连接 SQL如下&#xff1a; SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER …...

滚动条设置

不同浏览器滚动条样式及滚动定位 是否可以滚动 overflow&#xff1a;scroll overflow&#xff1a;autooverflow:scroll – 只有超出了盒子才会有滚动条 overflow:auto – 一直有滚动的盒子&#xff0c;只是超出了盒子才会出现滚动条滑块&#xff0c;可以滚动 谷歌浏览器滚动…...

【AI】机器学习——感知机

文章目录 4.1 感知机基本概念4.2 策略4.2.1 数据集的线性可分性4.2.2 学习策略目标损失函数的构造关于距离的解释 4.3 算法4.3.1 原始形式损失函数的梯度下降法 4.3.2 PLA例题4.3.3 算法收敛性 4.4 PLA对偶形式4.4.1 原始PLA分析4.4.2 PLA对偶形式4.4.3 优点 4.1 感知机基本概念…...

蓝牙遥控器在T2-U上的应用

文章目录 简介优势使用流程示例代码遥控器命令表遥控器代码实现开启遥控器配对功能运行 简介 Tuya beacon 协议是基于 BLE 广播通信技术&#xff0c;完善配对解绑、组包拆包、群组管理、加密解密、安全策略&#xff0c;形成的一种轻量、安全的可接入涂鸦云的蓝牙协议。 蓝牙 …...

数据驱动的数字营销与消费者运营

引言&#xff1a;基于海洋馆文旅企业在推广宣传中&#xff0c;如何通过指标体系量化分析广告收益对业务带来的收益价值的思考&#xff1f; 第一部分:前链路引流投放的策略与实战 1.1 动态广告的实现: 偶然与必然 动态广告是一种基于实时数据和用户行为的广告形式&#xff0c;它…...

如何快速找回压缩包密码:ArchivePasswordTestTool完整使用指南

如何快速找回压缩包密码&#xff1a;ArchivePasswordTestTool完整使用指南 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经遇到过…...

C语言-指针二

一. 指针的操作int main() {int a 10 , b 20, c 30;int *p NULL, *q NULL;p &a;//对指针变量p本身进行修改b *p;//*p为右值表示对变量a的读取*p 60;//*p为左值表示通过指向的内存空间对变量a的写入p &c;//p指向的内存空间发生变化b *p;//对c的读取操作*p 70…...

苍穹外卖开发日记-员工管理与AOP自动填充

苍穹外卖开发日记&#xff1a;员工管理、分类管理与AOP自动填充实战今天完成了苍穹外卖项目的员工管理模块、分类管理模块&#xff0c;并通过自定义注解AOP的方式实现了公共字段的自动填充&#xff0c;让我们来回顾一下这些核心功能的实现。一、今日工作概览时间完成内容14:44新…...

基于ChatGPT与Telethon的Telegram频道智能评论机器人开发指南

1. 项目概述与核心价值 如果你在运营Telegram频道&#xff0c;或者需要管理多个社群&#xff0c;肯定遇到过这样的场景&#xff1a;频道里每天都有大量新消息&#xff0c;你想保持活跃度、引导讨论&#xff0c;但手动回复每一条消息不仅耗时耗力&#xff0c;还很难保证回复的质…...

毫米波ISAC系统设计与FPGA实现关键技术

1. 毫米波ISAC系统设计背景与核心挑战在车联网和自动驾驶场景中&#xff0c;毫米波技术因其大带宽特性同时满足了高精度环境感知与高速数据传输的双重需求。传统方案采用雷达与通信系统独立部署&#xff0c;导致硬件资源浪费和频谱效率低下。我们基于IEEE 802.11ad标准设计的雷…...

不止于建模:用COMSOL几何操作优化你的仿真效率(分隔、二维轴对称实战)

不止于建模&#xff1a;用COMSOL几何操作优化你的仿真效率 在工程仿真领域&#xff0c;几何建模往往被视为前期准备工作&#xff0c;但真正的高手知道&#xff1a;建模阶段的每一个决策都会在后续网格划分和求解过程中产生指数级影响。我们曾对比过两个相似的电机散热模型——一…...

华为eNSP模拟企业网:用VRRP+MSTP搞定500人公司的网络冗余与隔离(附排错记录)

华为eNSP实战&#xff1a;构建500人企业级网络的高可用架构 当一家企业发展到500人规模时&#xff0c;网络架构的稳定性和可靠性就成为业务连续性的关键保障。作为网络工程师&#xff0c;我们经常面临这样的挑战&#xff1a;如何在有限的预算下&#xff0c;设计出既满足部门隔离…...

npcpy:模块化AI智能体框架,从角色构建到团队协作的工程实践

1. 项目概述&#xff1a;一个为AI应用构建者准备的“瑞士军刀”如果你和我一样&#xff0c;在过去几年里尝试过用大语言模型&#xff08;LLM&#xff09;构建点什么东西&#xff0c;那你大概率经历过这样的循环&#xff1a;从LangChain、LlamaIndex这类框架开始&#xff0c;被它…...

从游戏角色到人脸分析:聊聊‘摇头、点头、转头’背后的欧拉角与万向节死锁

游戏角色控制与人脸分析的奇妙交汇&#xff1a;解码欧拉角与万向节死锁 想象一下你在玩一款3A级开放世界游戏&#xff1a;按下左摇杆&#xff0c;角色开始左右张望&#xff1b;推动右摇杆&#xff0c;角色抬头望向天空中的飞龙&#xff1b;同时扳动两个摇杆&#xff0c;角色做出…...

为什么92%的AI团队Serverless化失败?奇点大会披露的4个反直觉架构断点与实时熔断方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生Serverless实践&#xff1a;2026奇点智能技术大会无服务器架构 在2026奇点智能技术大会上&#xff0c;AI原生Serverless成为核心范式——它不再将模型推理简单托管于函数即服务&#xff08;FaaS&…...