LeetCode--复原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 中的任何数字。你可以按 任何 顺序返回答案。
思路:将字符串装入StringBuilder中,对sb进行分割,如果满足合法的ip地址则加上'.' ,进行递归。
题解:

private List<String> res = new ArrayList<>();
private StringBuilder path;
private int count = 0;
public List<String> restoreIpAddresses(String s) {path = new StringBuilder(s);backtracking(0);return res;
}
private void backtracking(int i) {// 终止条件,逗号的个数等于3if (count == 3) {// 判断第四段字符串是否是合法的IP地址if (isValid(path, i, path.length()-1)) {res.add(path.toString());}return;}for (int j = i; j < path.length(); j++) {// 判断是否是合法的IP地址if (isValid(path, i, j)) {// 插入逗号path.insert(j+1, '.');// 逗号计数器加一count++;// 递归+2 是因为插入了逗号,所以要跳过backtracking(j+2);// 回溯path.deleteCharAt(j+1);// 逗号计数器减一count--;}}
}
// 判断是否是合法的IP地址
private boolean isValid(StringBuilder s,int left ,int right) {// 判断长度if (left > right) {return false;}// 判断是否以0开头if (s.charAt(left) == '0' && left != right) {return false;}// 判断是否在0-255之间int num = 0;for (int i = left; i <= right; i++) {if (sb.charAt(i) >= '0' && sb.charAt(i) <= '9') {int temp = sb.charAt(i)-'0';num = num*10 + temp;} else {return false;}}return res >= 0 && res <= 255;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS3——3. 书写格式二

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写&#xff1a;--><!--1. 属性名:属性值--><!--2.属性值是对属性的相关描述--><!--3.属性名必须是…

windows配置jdk

进入此网址 JDK 11 Releases 找到11版本进行下载 下载好后配置环境变量 按windows加r键输入sysdm.cpl点击确定 在系统变量里新建输入 JAVA_HOME D:\openjdk-1128_windows-x64_bin\jdk-11 //变量值为安装jidk的路径 配置path环境变量 编辑path变量输入%JAVA_HOME%\bin并放置最…

深入刨析数据结构之排序(下)

目录 1.内部排序 1.5选择排序 1.5.1简单选择排序 1.5.2树形选择排序 1.6堆排序 1.7归并排序 1.7.1递归归并 1.7.2非递归归并 1.8计数排序 1.9基数排序 常见内部排序的总结&#xff1a; 1.内部排序 1.5选择排序 选择排序&#xff08;Selection Sort&#xff09;的基…

RocketMQ场景问题

1.消息丢失 有这么一个场景&#xff0c;就是订单支付完成之后&#xff0c;订单系统会进行发送消息给RocketMQ集群&#xff0c;下游会有积分系统进行监听这个消息&#xff0c;进行消费然后给用户发放积分。在下面的这个场景中&#xff0c;通过查询日志发现了订单系统发送订单支付…

openwrt host方式编译ffmpeg尝试及问题分析

openwrt host方式编译ffmpeg尝试及问题分析 configure错误分析编译错误一: ERROR: gnutls not found using pkg-config编译错误2: ERROR: libdrm not found using pkg-config编译错误3: ERROR: libmp3lame >= 3.98.3 not found编译错误4: ERROR: x264 not found using pkg…

springboot优先级和ThreadLocal

什么是ThreadLocal 定义&#xff1a;ThreadLocal 是线程的局部变量&#xff0c;为每个线程提供单独一份存储空间&#xff0c;具有线程隔离的效果。特点&#xff1a;不同的线程之间不会相互干扰。 ThreadLocal的应用场景 数据共享&#xff1a;在同一个线程或同一个请求中进行…

cordova项目环境搭建 hello

环境准备&#xff1a; 1.下载nodejs并安装配置。 直接官网下载最新版本。此次我是下载的 Node.js v22.12.0。 1.1安装好后配置镜像。 输入&#xff1a;node -v // 显示node.js版本 npm -v // 显示npm版本 1.2环境配置 &#xff08;1&#xff09;找到安装的目录&am…

LE Audio 初探

LE Audio 架构 一.LE Audio profile框架 profile初识&#xff1a; BAP&#xff1a; BAP通常在手机端实现&#xff0c;它允许配置编解码器&#xff0c;配置QoS(质量服务)&#xff0c;控制流媒体&#xff0c; PACS&#xff1a; Published Audio Capabilities Service&#xff0c;…

Ⅱ.INTRODUCTION TO CUDA C

前言 上一节环境配置好了&#xff0c;我们开始吧&#xff01; 一、A First Program 1. Hello, World! 我们先写一个C语言的 Hello, World! 作为对比 int main(void){printf("Hello, World!\n");return 0; }大家应该知道这个代码运行在CPU上吧&#xff0c;我们CP…

CSP初赛知识学习计划(第一天)

计算机知识全解析 一、计算机的发展历程 计算机的发展堪称一部波澜壮阔的科技史诗&#xff0c;其源头可追溯至古老的计算工具。早期&#xff0c;为了满足人类在天文、历法计算以及商业贸易中对数据处理的需求&#xff0c;算盘、算筹等手动计算器械应运而生&#xff0c;它们依…

科大讯飞android面试题及参考答案

如何理解面向对象编程? 面向对象编程(Object - Oriented Programming,简称 OOP)是一种编程范式,它以对象为核心来组织程序结构。 在面向对象编程中,对象是数据和操作这些数据的方法的集合。例如,我们可以把汽车看作一个对象。汽车有自己的属性,像颜色、品牌、速度等,这…

【数据仓库】hadoop web UI 增加账号密码认证

​ 升级了hadoop版本到3.3.6,未配置任何鉴权,默认端口9870 8088开放到了公网,结果没几天就被挖矿攻击了。通过开放的端口提交了很多非法任务到yarn上,并成功在服务器执行了恶意脚本。这次是真实真切的感受了,网络环境的险恶,以前仅仅是别人的案例来提高自己的安全意识,这…

域上的多项式环,整除,相通,互质

例1.已知 (R,,x)为域&#xff0c;请选出正确的说法:(A)(R,,x)也是整区; ABCD (B)R中无零因子; C)R在x运算上满足第一、二、三指数律; (D)R只有平凡理想; (E)R只有平凡子环。 域的特征&#xff1a; 域中&#xff0c;非0元素的加法周期 思考、在模7整数环R,中&#xff0c;…

【0x0014】HCI_Read_Local_Name命令详解

目录 一、命令概述 二、命令格式 三、返回事件及参数说明 3.1. HCI_Command_Complete 事件 3.2. Status 3.3. Local_Name 四、命令执行流程 4.1. 命令发送 4.2. 控制器接收并处理命令 4.3. 控制器返回结果 4.4. 主机接收并解析事件包 4.5. 示例代码 五、应用场景 …

【AI日记】25.01.04 kaggle 比赛 3-3 | 王慧玲与基层女性

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales时间&#xff1a;6 小时 读书 书名&#xff1a;基层女性时间&#xff1a;3 小时原因&#xff1a;虽然我之前就知道这个作者&#xff0c;因为我…

【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性

文章目录 前言一、特性&#xff08;Attributes&#xff09;基本概念二、自定义特性1、自定义特性代码示例&#xff1a;2、应用自定义特性&#xff1a;3、解释3.1 **AttributeUsage 特性**3.2 特性的命名3.3 **构造函数**&#xff1a;3.4 **属性**&#xff1a; 4、使用反射获取特…

PG起库逻辑和spill导致起库慢问题分析

问题现象-起库缓慢 版本pg13.2 数据库启动缓慢&#xff0c;startup进程在读取spill文件&#xff0c;文件名在变化。查看spill文件也很慢&#xff0c;ls -l最后跑出来有800w个文件spill文件。 为什么有上千万个spill文件 wal段和LSN的含义 LSN LSN总体是一个64位的bigint&…

【Python学习(六)——While、for、循环控制、指数爆炸】

Python学习&#xff08;六&#xff09;——While、for、循环控制、指数爆炸 本文介绍了While、for、循环控制、指数爆炸&#xff0c;仅作为本人学习时记录&#xff0c;感兴趣的初学者可以一起看看&#xff0c;欢迎评论区讨论&#xff0c;一起加油鸭~~~ 心中默念&#xff1a;Py…

【JS】期约的Promise.all()和 Promise.race()区别

概述 Promise.all() 和 Promise.race() 都是 JavaScript 中处理多个异步操作的 Promise 方法&#xff0c;但它们的行为和返回结果有所不同。 Promise.all()和Promise.race() 1. Promise.all() Promise.all() 接受一个由多个 Promise 实例组成的可迭代对象&#xff08;例如数…

5 Linux 网络编程基础 API

5 Linux 网络编程基础 API 主机字节序和网络字节序 主机&#xff08;小端&#xff09;字节序&#xff1a;0x0201网络&#xff08;大端&#xff09;字节序&#xff1a;0x0102&#xff0c;利于人看 #include <netinet/in.h> unsigned long int htonl(unsigned long int …