Leetcode 93-复原 IP 地址

有效 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 中的任何数字。你可以按 任何 顺序返回答案。
在这里插入图片描述

题解

在这里插入图片描述
题解可参考liweiwei1419和代码随想录

一、判断IP是否合规(注意:这块需要每分割一个数就判断,这样有一个数不满足就递归终止,相当于剪枝):

  • 首先,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址

  • 根据截取出来的字符串判断是否是合理的 ip 段,这里写法比较多,可以先截取,再转换成 int ,再判断:
    在0到255之间
    0开头的话只能是0.0.0.0(s.charAt(0)==‘0’&&s.length()!=1,return false)
    数目不等于四组,即num == 4(用num判断,而不需要用string.split()函数分割结果字符串)

二、利用回溯法找分割位置

  • 终止条件:startIndex>=s.length()(分割位置越过数组长度,说明已经得到了一个满足条件的IP),path.add(temp),这里要判断num==4,由于 ip 段就 4 个段,不满足不可以加入结果集
  • 每层:限制i<=startIndex+2(剪枝,每一个结点可以选择截取的方法只有 3 种:截 1 位、截 2 位、截 3 位,因此每一个结点可以生长出的分支最多只有 3 条分支)和 i<s.length()
    (1)获得本次分割的数组:temp+s.substring(startIndex,i+1))+“.”,注意这里最后一个数字要特殊处理
    (2)判断是否有效,有效则继续进行分割,即进入下一层递归
    (3)分割数字的数目+1,即num++
    (4)回溯:num–
  • 递归参数有:
    num:已经分割出多少个 ip 段;
    startIndex:截取 ip 段的起始位置;
    path:记录从根结点到叶子结点的一个路径
    temp:记录当前已经拼接得到的字符串
class Solution {public List<String> path = new ArrayList<>();//用于记录分割了几个整数,已经分割了四次才可能是有效IPpublic int num=0;public List<String> restoreIpAddresses(String s) {//剪枝if (s.length() < 4 || s.length() > 12) return path; dfs(s,"",0);return path;}private void dfs(String s,String temp,int startIndex){//终止if(startIndex>=s.length()){//判断是否有效IPif(num==4) path.add(temp);return;}for(int i=startIndex;i<startIndex+3&&i<s.length();i++){//substring(startIndex,i+1)的取值范围是[startIndex,i]String str=s.substring(startIndex,i+1);if(isValidIP(str)){//分割数字+1num++;//最后一个IP不需要加"."if(num==4) dfs(s,temp+str,i+1);else dfs(s,temp+str+".",i+1);//回溯,但temp+str+"."不需要回溯num--;}else{//这条递归提前终止break;}}}private boolean isValidIP(String s){//以0开头但长度不为1,如023if(s.charAt(0)=='0'&&s.length()!=1) return false;//大小不在0-255之间int temp=Integer.valueOf(s);if(temp<0||temp>255) return false;return true;}
}

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

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

相关文章

【爆炸】BB机,BP机,寻呼系统基础知识,物理层讲解

本页介绍寻呼系统基础知识。其中提到了寻呼机使用的数字协议并描述了数字寻呼接收器。 寻呼是一种单向通信系统。寻呼系统向携带小型电池供电设备&#xff08;称为寻呼机&#xff09;的个人广播信号或消息。这是与员工和/或客户沟通的非常重要的方式。让我们看看寻呼系统的工作…

IP包头分析

IP包头 选择自己的网卡&#xff0c;开始抓包 ping一个字节大点的数据&#xff0c;方便查看包 选择数据包&#xff0c;并过滤icmp协议 查看抓到的包&#xff0c;分析 IP包头范围&#xff1a;20-60 首部长度&#xff1a;定义包头的长度 总长度&#xff1a;表示当前数据的长度…

【模板进阶】模板的万能引用

一、类型的区别和基本定义 1.1类型的基本定义 首先先看一个最简单例子&#xff1a; //类型的区别和基本定义 void func(const int& abc) { } //abc的类型为const int&这里的 a b c abc abc被推导为什么类型&#xff1f; 显然可见&#xff0c;为 c o n s t i n t &am…

mysql使用sql函数对json数组的处理

MySQL从5.7版本开始增加了对JSON数据类型的支持。你可以使用->>操作符和JSON_EXTRACT函数来访问JSON数据中的值。 但是&#xff0c;对于JSON数组&#xff0c;如果你想要获取数组中的所有元素&#xff0c;MySQL并没有直接的函数来返回数组中的所有元素作为单独的行。不过…

PDF产品册营销推广利器FLBOOK

在互联网高速发展的时代&#xff0c;营销推广已成为企业拓展市场的重要手段。而一款优秀的营销工具&#xff0c;可以为企业带来事半功倍的推广效果。今天&#xff0c;就为大家介绍一款集创意与实用于一体的PDF产品册营销推广利器——FLBOOK&#xff0c;帮助企业轻松提升品牌影响…

算法-查找算法(顺序查找二分查找)

3.查找算法 查找也称为搜索&#xff0c;就是从数据中找出满足特定条件的元素。 常见的查找算法&#xff1a;顺序查找、二分查找。 3.1 顺序查找算法 顺序查找算法又称为线性查找&#xff0c;是一种比较简单的查找算法&#xff0c;是将数据一项一项的按照顺序逐个查找&#x…

电力电容器、电子电容器的区别

电力电容器和电子电容器在用途、结构、工作环境以及电气性能等方面有显著的区别。以下是它们的主要区别&#xff1a; 1、用途和应用场景 电力电容器&#xff1a; 主要用于电力系统中&#xff0c;主要功能是进行无功功率补偿&#xff0c;提高功率因数&#xff0c;改善电网的电…

mybatisplus介绍以及使用(上)

目录 一、概念 1、什么是mybatisplus 2、为什么要使用mybatisplus 二、mybatisplus的使用 1、安装 2、常用注解 3、条件构造器 一、概念 1、什么是mybatisplus MyBatis-Plus&#xff08;简称MP&#xff09;是一个基于MyBatis的增强框架&#xff0c;旨在简化开发、提高…

云端启航,探索微生物奥秘——美格基因云组学分析全新升级!

在这个信息爆炸的时代&#xff0c;我们深知高效的数据处理对于科研的重要性。为了帮助您更好地挖掘微生物世界的无限可能&#xff0c;美格基因凭借在弹性云计算领域的深厚积累&#xff0c;构建了一个强大的云生态系统。这一系统不仅整合了云组学、云工具、云数据库、前沿工具等…

人脸活体检测系统源码分享

人脸活体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Spring底层架构源码解析(三)

目录 ApplicationContext AnnotationConfigApplicationContext ClassPathXmlApplicationContext 类型转换 PropertyEditor ConversionService BeanPostProcessor FactoryBean MetadataReader、ClassMetadata、 AnnotationMetadata ExcludeFilter&#xff0c;Inclu…

【2025】基于微信小程序的人工智能课程学习平台的设计与实现(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

如何使用ssm实现企业文档管理系统+vue

TOC ssm648企业文档管理系统vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

htop(1) command

文章目录 1.简介2.格式3.选项4.交互式命令5.示例6.小结参考文献 1.简介 htop 是一种交互式、跨平台的基于 ncurses 的进程查看器。 类似于 top&#xff0c;但 htop 允许您垂直和水平滚动&#xff0c;并使用指向设备(鼠标)进行交互。您可以观察系统上运行的所有进程&#xff0…

关于支持向量机的一份介绍

在这篇文章中&#xff0c;我将介绍与支持向量机有关的东西&#xff0c;我们知道支持向量机主要分两类&#xff0c;就是线性支持向量机和核支持向量机这两种&#xff08;当然还有其他的&#xff0c;如多类支持向量机、 Nu-Support Vector Regression等&#xff09;&#xff0c;因…

docker存储

docker分层结构 如图所示&#xff0c;容器是由最上面可读可写的容器层&#xff0c;以及若干个只读镜像层组成&#xff0c;创建容器时&#xff0c;容器中的 数据都来自镜像层。这样的分层机构最大的特点是写时复制&#xff1a; 1、容器中新生成的数据会直接存放在容器层&#xf…

产品经理入门攻略:如何从零开始成为产品经理

“人人都是产品经理”这句话相信你一定听过。 作为现在的热门职业&#xff0c;许多朋友也在心里埋下了一颗想要成为产品经理的种子。 产品经理的工作其实没有传说中的那么“高大上”&#xff0c;甚至可以说大多数时候是枯燥且无聊的&#xff0c;需要不断地对数据进行分析&…

第十一章 【后端】商品分类管理微服务(11.5)——增强响应

11.5 增强响应 在前后端分离的开发模式下,我们一般会统一后端的响应格式,比如自定义 Response 结构,但每个开发者可能会封装各自的 Response 结构,造成不一致,因此我们需要将响应格式统一起来,定义一个统一的标准响应格式。 11.5.1 创建响应模块 新建 yumi-etms-respon…

高效实现业务流程管理的技术——低代码解决方案

一、低代码平台概述 低代码平台允许用户通过可视化的界面设计和配置应用程序&#xff0c;而无需深入编程知识。这种平台通常包括拖拽式的组件、流程图设计工具、以及预设的功能模块&#xff0c;使得业务用户和开发者都能快速构建和修改应用程序。 二、低代码平台在 BPM 中的优…

动手学深度学习PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…