LeetCode--93. 复原 IP 地址

news/2025/2/27 18:49:32/

93. 复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0255 之间组成,且不能含有前导 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 中的任何数字。你可以按 任何 顺序返回答案。


dfs

第一次看到,像是dfs,一做,还真是,不过要处理的情况有很多,比如前导零,'.'的个数,遍历的起点。

首先,用ans存储string的切片,通过传递pointNum来知道当前小数点的个数,通过st来知道当前遍历的起点,ip来存储当前计算出来的ip。

首先,当pointNum == 4时,判断字符串长度是否等于st,如果是,存入当前ip,如果不是,直接返回,至于ip合理性的判断,是在计算ip的时候就已经做了判断,这里不需要多余的判断,下面会提到

然后如果当前st != 0,那么在ip后面加上"."

然后就是激动人心的遍历字符串了,从st开始遍历,通过最多遍历三个字符的条件来进行一定程度的剪枝,然后如果当前数字具有前导零就是说num[0] == '0'的话,就continue,不断continue直到数字没有前导零。

如果没有前导零,将字符串转换为int,判断是否有效,有效则加入ip,进行下一轮dfs,无效则继续遍历

值得注意的是,dfs之后需要恢复ip的状态。

func restoreIpAddresses(s string) []string {var ans []stringdfs(&ans, s, "", 0, 0)return ans
}func dfs(ans *[]string, s string, ip string, st int, pointNum int) {if pointNum == 4 {if st == len(s) { *ans = append(*ans, ip)}return}if st != 0 {ip += "."}var num stringfor i := st; i < len(s) && i < st + 3; i ++ {num = s[st : i + 1]if len(num) > 1 && num[0] == '0' {continue}if x,_ := strconv.Atoi(num); x >= 0 && x <= 255 {ip += numdfs(ans, s, ip, i + 1, pointNum + 1)ip = ip[:len(ip) - len(num)]}}
}

http://www.ppmy.cn/news/1575305.html

相关文章

LabVIEW不规则正弦波波峰波谷检测

在处理不规则正弦波信号时&#xff0c;准确检测波峰和波谷是分析和处理信号的关键任务。特别是在实验数据、传感器信号或其他非理想波形中&#xff0c;波峰和波谷的位置可以提供有价值的信息。然而&#xff0c;由于噪声干扰、信号畸变以及不规则性&#xff0c;波峰波谷的检测变…

go-zero中定时任务的用法

文章目录 使用扩展定义调度器测试方法 使用扩展 在go-zero框架中使用定时任务调度的写法示例&#xff0c;首先需要用到的扩展&#xff1a;go get -u github.com/robfig/cron/v3 扩展网址&#xff1a;robfig/cron: a cron library for go (github.com) 定义调度器 在 gozero/i…

自由学习记录(39)

threshold&#xff08;blend tree&#xff09; Threshold 用来指定动画的完全权重时刻&#xff08;完全切换点&#xff09; 参数达到 Threshold 值之后&#xff0c;并不会立即“隔断”当前的动画&#xff0c;而是 平滑过渡到下一个动画 例如&#xff1a; Jump 动画的 Thresh…

视频字幕识别和翻译

下载的视频很多不是汉语的&#xff0c;我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费&#xff0c;但是低版本还是没有问题。 如果想要非汉语字幕转成中文&#xff0c;剪映低版本不提供这样功能。但是&#xff0c;用剪映导出识别字幕&am…

一周学会Flask3 Python Web开发-Jinja2模板继承和include标签使用

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 不管是开发网站还是后台管理系统&#xff0c;我们页面里多多少少有公共的模块。比如博客网站&#xff0c;就有公共的头部&…

无框架简易Java服务器后端

不使用像 Spring Boot 这样的框架&#xff0c;使用 Java 内置的HttpServer&#xff08;从 Java 1.7 开始引入&#xff09;来创建一个简单的 Web 后端&#xff0c;处理xxxx/test/query接口&#xff0c;接收 JSON 请求体并返回字符串响应。 示例代码&#xff1a; import com.go…

Amazon Outposts:构建混合云的安全堡垒,让数据安全“零距离”

在数字化转型的浪潮中&#xff0c;企业纷纷拥抱混合云架构以兼顾敏捷性与本地化需求。然而&#xff0c;如何确保数据在本地与云端的无缝流转中始终安全可控&#xff0c;成为企业面临的核心挑战。Amazon Outposts 作为AWS推出的混合云解决方案&#xff0c;不仅将原生AWS服务延伸…

【mysql中mvcc的含义和作用及原理】

MySQL中的MVCC&#xff08;多版本并发控制&#xff09;是一种用于提高数据库并发性能的机制&#xff0c;通过维护数据的多个版本&#xff0c;实现读写操作的无锁并发。以下是其核心要点&#xff1a; 1. MVCC的含义 全称&#xff1a;Multi-Version Concurrency Control&#xf…