java复原IP 地址(力扣Leetcode93)
复原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 中的任何数字。可以按 任何 顺序返回答案。
示例
示例 1:
输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]
示例 2:
输入:s = "0000"
输出:["0.0.0.0"]
示例 3:
输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
解题思路
这是一个回溯算法的经典问题,我们需要通过在字符串 s 中插入点来形成有效的 IP 地址。有效的 IP 地址由四个整数组成,每个整数位于 0 到 255 之间,且不能含有前导 0。
我们可以使用回溯算法来尝试所有可能的分割方案,并验证每个分割是否满足 IP 地址的要求。
- 回溯搜索: 定义一个回溯函数
backtrack,其参数包括当前处理的索引start、当前的字符串s、当前已形成的 IP 地址列表path和当前已形成的 IP 地址段数量segments。 - 结束条件: 如果已形成的 IP 地址段数量
segments等于 4 且start等于字符串s的长度,说明已经形成了一个有效的 IP 地址,将其加入结果列表,并返回。 - 选择列表: 在当前索引
start后插入一个点,形成新的 IP 地址段。 - 遍历选择: 遍历从当前索引
start开始的所有可能的分割点,尝试形成新的 IP 地址段。 - 判断是否合法: 对于每个可能的分割点,检查其所形成的 IP 地址段是否合法,即是否满足整数在 0 到 255 之间,且不能含有前导 0。
- 递归进入下一层: 如果形成的 IP 地址段合法,则将其加入当前 IP 地址列表,并递归调用回溯函数,传入新的索引
i + 1、更新后的 IP 地址列表和 IP 地址段数量。 - 撤销选择: 回溯到上一层时,将刚刚加入的 IP 地址段从列表中删除,继续尝试下一个分割点。

Java解题
import java.util.*;class Solution {List<String> res = new ArrayList<>();public List<String> restoreIpAddresses(String s) {List<String> path = new ArrayList<>();backtrack(s, 0, path, 0);return res;}public void backtrack(String s, int start, List<String> path, int segments) {// 结束条件:已形成 4 个 IP 地址段,并且已遍历完整个字符串if (segments == 4 && start == s.length()) {res.add(String.join(".", path));return;}// 遍历可能的分割点for (int i = start; i < s.length(); i++) {String seg = s.substring(start, i + 1);// 判断 IP 地址段是否合法if (isValidSegment(seg)) {// 做出选择path.add(seg);// 递归进入下一层backtrack(s, i + 1, path, segments + 1);// 撤销选择path.remove(path.size() - 1);} else {// 如果当前分割点不合法,不必继续尝试更长的 IP 地址段break;}}}// 判断 IP 地址段是否合法private boolean isValidSegment(String segment) {if (segment.length() > 1 && segment.charAt(0) == '0') {return false; // IP 地址段不能含有前导 0}int num = Integer.parseInt(segment);return num >= 0 && num <= 255;}
}
通过回溯算法,我们可以找出给定字符串 s 的所有可能的有效 IP 地址组合。在回溯搜索的过程中,我们使用了剪枝操作来提高算法的效率,避免不必要的递归。
相关文章:
java复原IP 地址(力扣Leetcode93)
复原IP 地址 力扣原题链接 问题描述 有效 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。 例如:“0.1.2.201” 和 “192.168.1.1” 是有效 IP 地址,…...
k8s的创建资源的流程图
背景 在k8s中创建资源需要经过几个流程的协作,包括认证模块,授权模块和资源管理模块的共同处理的结果 k8s的创建资源的流程图 第一步认证模块: k8s需要确保操作的客户端是合法的用户,并且不是仿冒的,也就是判断这个u…...
Android RecyclerView 滑动后选中的条目居中显示
话不多说先看效果: 实录效果视频如下 滚动居中 RecyclerView 在原有的RecyclerView 基础上操作,其他步骤不变,只是替换一下 manager 步骤 导入依赖 maven { url https://www.jitpack.io }//无限滚动implementation com.github.ZhaoChanghu:GalleryLayou…...
RPA-财务对账邮件应用自动化(客户对账机器人)
《财务对账邮件应用自动化》,将会使用邮箱的SMTP服务,小北把资源包绑定在这篇博客了 Uibot (RPA设计软件)———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~) …...
Delphi模式编程
文章目录 Delphi模式编程涉及以下几个关键方面:**设计模式的应用****Delphi特性的利用****实际开发中的实践** Delphi模式编程的实例 Delphi模式编程是指在使用Delphi这一集成开发环境(IDE)和Object Pascal语言进行软件开发时,采用…...
flutter 自定义弹窗封装弹窗----在弹窗内实现部分窗体生命周期
小部件组件 可以在里面加装其他事件如HTTP接口访问 import package:flutter/material.dart;///执行弹窗动画封装 class ExecutionDialog extends StatefulWidget {// final String? title;// final String? message;// final Function? onExecute;//// const ExecutionDial…...
go语言 私用仓库包下载
设置私有仓库,这样访问的时候,url前缀就不加proxy和sumdb go env -w GOPRIVATE"code.xxx.cn" go env -w GONOPROXY"code.xxx.cn" go env -w GONOSUMDB"code.xxx.cn" 设置取消安全认证 go env -w GOINSECURE"code…...
Math类
java.lang.Math 提供了一系列静态方法用于科学计算,常用方法如下: abs 绝对值 acos,asin,atan,cos,sin,tan 三角函数 sqrt 平方根 pow(double a,double b) a的b次幂 max(double a,double b) 取大…...
Git 入门教程
Git 入门教程 一、Git 是什么? Git 是一个开源的分布式版本控制系统,用于追踪代码的改动。它可以帮助开发者协同工作,管理项目中的代码版本。 二、安装 Git 在开始使用 Git 之前,你需要在你的计算机上安装 Git。你可以从 Git …...
Linux网络配置(超详细)
Linux网络配置大全 Linux网络配置一.网络地址配置网络地址查看–ifconfig使用网络配置命令设置网络接口参数-ifconfig禁用(临时)或者重新激活网卡设置虚拟网络接口 修改网络配置文件网络接口配置文件 IP命令详解OPTIONS选项OBJECT对象 ip link 二、获取和修改主机名hostname查看…...
[自研开源] 数据集成之分批传输 v0.7
开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 本篇基于…...
用 AI 编程-释放ChatGPT的力量
最近读了本书,是 Sean A Williams 写的,感觉上还是相当不错的。一本薄薄的英文书,还真是写的相当好。如果你想看,还找不到,可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…...
【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法
目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索:服务 编辑 3、点击Windows工具 4、点击服务 5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统,但是目前的谷歌驱动系统的版本都太旧了,谷歌自身的版本又太新了…...
【Leetcode每日一题】模拟 - 替换所有的问号(难度⭐)(42)
1. 题目解析 题目链接:1576. 替换所有的问号 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 遍历字符串:从左到右逐个处理字符。 处理问号字符:对于每个问号字符,我们需…...
再见 mysql_upgrade
在数据库管理的世界里,随着技术的不断进步和业务的不断发展,数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统,其版本迭代与功能优化同样不容忽视。 而在这个过程中,升级工具就显得尤为…...
.NET Core教程:入门与实践实例
.NET Core教程:入门与实践实例 在信息技术飞速发展的今天,掌握一门高效的编程技术成为了每个开发者不可或缺的技能。在众多编程框架中,.NET Core以其跨平台、高性能和易扩展的特性,受到了广大开发者的青睐。本文将通过实例&#…...
docker环境配置过程中的常见问题
1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…...
精选2024年最佳项目管理系统!实用推荐与详细评测
随着企业规模的扩大,项目量也会呈几何倍的增长,项目管理系统就成了企业管理必不可少的一部分。2024年优秀的项目管理系统推荐。今年为大家带来Microsoft Project、Zoho Projects、Jira以及Wrike项目管理系统评测。 什么是项目管理系统? 项目…...
民航电子数据库:CAEMigrator迁移数据库时总是卡死
目录 一、场景二、异常情况三、排查四、应急方案 一、场景 1、对接民航电子数据库 2、将mysql数据库迁移到cae数据库 3、使用CAEMigrator迁移工具进行数据库迁移时,该工具会卡死(不清楚是否是部署cae服务的服务器资源导致) 二、异常情况 …...
数据结构 第6章 图(一轮习题总结)
数据结构 第6章 图 6.1 图的基本概念6.2 图的存储及基本操作6.3 图的遍历6.4 图的应用 6.1 图的基本概念(2 4 11) 6.2 图的存储及基本操作(1 12 13 15 16) 6.3 图的遍历(2 3 5 16) 6.4 图的应用 6.1 图的基…...
InferenceX:大模型高效推理引擎核心原理与生产部署实战
1. 项目概述:从模型训练到高效推理的最后一公里如果你在AI领域,特别是大模型应用开发上投入过精力,那么对“InferenceX”这个名字可能不会感到陌生。它不是一个全新的训练框架,也不是一个模型仓库,而是精准地瞄准了当前…...
探索Windows平台智能PPT演示计时器的实现与实践
探索Windows平台智能PPT演示计时器的实现与实践 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 在技术分享或学术汇报场景中,时间管理常常成为影响演示效果的关键因素。演讲者需要同时关注内容表达…...
如何利用WinRAR分卷压缩,轻松突破大文件传输限制
1. 为什么需要分卷压缩? 在日常工作和生活中,我们经常会遇到需要传输大文件的情况。比如设计师要发送PSD源文件给客户,程序员要分享开发环境的镜像,或者普通用户想通过邮件发送高清视频给亲友。但几乎所有主流传输平台都对单个文件…...
别再死记硬背了!用这三个二极管等效模型,轻松搞定电路分析(附典型例题)
二极管电路分析的三大黄金法则:从理论到实战的思维跃迁 在电子工程领域,二极管就像电路世界里的"单向阀门",看似简单却暗藏玄机。许多初学者面对复杂二极管电路时,往往陷入盲目试错的困境——要么死记硬背公式ÿ…...
云原生地理空间分析引擎Meridian:基于Arrow与GeoParquet的高性能架构解析
1. 项目概述:一个面向未来的开源地理空间数据引擎最近在折腾一个涉及大量地理信息处理的项目,从海量GPS轨迹点到复杂的多边形区域分析,传统的数据库和工具链在处理效率和灵活性上开始捉襟见肘。就在这个当口,我注意到了GitHub上一…...
东芝成熟制程代工服务解析:More-than-Moore战略与欧洲市场机遇
1. 东芝的“伦敦呼唤”:一次面向欧洲的成熟制程代工服务解析最近在梳理半导体产业动态时,东芝在2012年的一项战略动作引起了我的注意。这并非关于其最前沿的3D NAND闪存,而是一项看似“复古”的业务拓展:面向欧洲客户开放其成熟制…...
Linux下Cursor AI编辑器自动化安装脚本设计与实现
1. 项目概述:为什么我们需要一个Cursor的Linux安装脚本如果你是一个在Linux环境下工作的开发者,并且对AI辅助编程工具感兴趣,那么Cursor这个名字你一定不陌生。作为一款集成了强大AI能力的代码编辑器,它正迅速成为许多程序员的新宠…...
开发者技能图谱:如何利用GitHub仓库系统化规划技术学习路径
1. 项目概述:一个面向开发者的技能图谱与学习路径仓库最近在GitHub上闲逛,发现了一个挺有意思的仓库,叫tayyabexe/skills。乍一看名字,你可能会觉得这又是一个“Awesome-XXX”式的资源列表合集。但点进去仔细研究后,我…...
避开BUUCTF《Life on Mars》的思维陷阱:当information_schema查询结果‘不对劲’时,你的排查清单应该有哪些?
破解BUUCTF《Life on Mars》的数据库迷局:当information_schema说谎时的七种侦查策略 在CTF赛场上,SQL注入类题目往往不会按教科书上的剧本发展。当你在BUUCTF《Life on Mars》这道题中执行group_concat(database()) from information_schema.schemata却…...
【网络安全】什么是漏洞扫描?有哪些功能?
【网络安全】什么是漏洞扫描?有哪些功能? 一、什么是漏洞扫描? 漏洞扫描是指基于CVE、CNVD、CNNVD 等漏洞数据库,通过专用工具扫描手段对指定的远程或者本地的网络设备、主机、数据库、操作系统、中间件、业务系统等进行脆弱性评估…...
