Leetcode 93 复原 IP 地址

题意理解:

        首先明确什么是正确的IP地址:简单理解三个小数点分割四个数字,每个数字的大小应在[0,255]内,且合法的数字表示不应该以0开头。

        合法:0.1.2.201                        不合法:0.01.2.257

        我们需要再合适的位置添加小数点。小数点总是添加在数字之间的位置。

解题思路

        如何在合适的位置添加小数点。

        其和切割字符串以满足某种要求的题目是类似的。这一类的题都可以用回溯的方法解决。

        约束条件则对应在合适的地方做剪枝操作,以便收集正确的结果。

1.暴力回溯+剪枝优化

前期准备: 判断数字是合法的ip的一部分,即数字在[0,255内],且不以0开头。

回溯解决问题三个关键步骤:        

        1.确定返回值+参数列表

        2.确定终止条件:获得三个小数点时,即可终止,因为合法的ip地址只有四段。

        3.单层逻辑|递归

        注意:

  1.         插入小数点的位置总是当前位置的后面,即cur+1的位置
  2.         下一层递归开始的位置是i+2: 即挪到下一个数字,且因为加入小数点多了一位,故因再往后挪一位,即+2。
  3.         10.10.23.   时,判断是否是ip时,坐标超出范围,返回false
  4.         数值越界问题:三个小数点后的数字串,应该再[0,255]之间,所以其长度超过3就可以返回false了,否则,再与0和255 比较,判断是否合法,如果直接转int或long, 过长的数字串可能导致数值越界。
  List<String> result=new ArrayList<>();//记录小数点个数int pointNum=0;StringBuilder s=new StringBuilder();public List<String> restoreIpAddresses(String s) {backtracking(new StringBuilder(s),0);return result;}//回溯|递归方法public void backtracking(StringBuilder s,int startIndex){//终止条件if(pointNum==3){if(isIPNumber(s,startIndex,s.length()-1)){//合法的子串result.add(new String(s));}return;}//单层递归逻辑for(int i=startIndex;i<s.length();i++){if(isIPNumber(s,startIndex,i)){s.insert(i+1,'.');pointNum++;backtracking(s,i+2);s.deleteCharAt(i+1);pointNum--;}else{continue;}}}//是合法ip数字,左闭右闭public boolean isIPNumber(StringBuilder s,int start,int end){//控制数组越界问题if(start>=s.length()) return false;if(s.charAt(start)=='0'&&start!=end) return false;//控制数值问题if(s.substring(start,end+1).length()>3) return false;int sNum= new Integer(s.substring(start,end+1));if(sNum<0||sNum>255) return false;return true;}

2.分析

时间复杂度:O(S\_LEN\times 3^{SEG\_CONT})

空间复杂度:O(SEG_COUNT)

 SEG_COUNT=4 表示 IP 地址的段数,S_LEN是字符串长度

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

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

相关文章

银行卡三要素API:保障金融安全的重要工具

引言 在互联网金融科技迅猛发展的时代&#xff0c;为了保障金融交易的安全性和准确性&#xff0c;各种身份验证技术层出不穷。其中&#xff0c;银行卡三要素API在身份验证领域发挥着重要作用。本文将详细介绍银行卡三要素API的原理、应用场景及其优势&#xff0c;以帮助读者更…

MySQL之单表操作

MySQL之单表操作 文章目录 MySQL之单表操作一、单表查询二、单表操作1、复制表结构2、插入数据3、删除数据4、更新数据5、排序6、限量7、分组 三、常用函数 一、单表查询 单表查询的语句为SELECT <Field_Name> FROM <Table_Name>&#xff0c;同时可以在后面加入WH…

智能优化算法应用:基于回溯搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于回溯搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于回溯搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.回溯搜索算法4.实验参数设定5.算法结果6.…

三个角度(握手、挥手、传输)优化TCP

TCP 三次握手的性能提升 客户端的优化 当客户端发起 SYN 包时&#xff0c;可以通过 tcp_syn_retries 控制其重传的次数。 服务端的优化 当服务端 SYN 半连接队列溢出后&#xff0c;会导致后续连接被丢弃&#xff0c;可以通过 netstat -s 观察半连接队列溢出的情况&#xff0c;如…

HTTP协议与HTTPS协议的区别

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是两种常用的网络协议&#xff0c;它们有以下区别&#xff1a; 1. 安全性&#xff1a; HTTP协议传输的数据是明文的&#xff0c;容易被窃听和篡改…

Uniapp安卓原生插件开发Demo

文章目录 前言一、安装开发工具二、导入uni插件原生项目三、开发Module四、开发Component五、合并原生代码到uniapp项目中总结 前言 当HBuilderX中提供的能力无法满足App功能需求&#xff0c;需要通过使用Andorid/iOS原生开发实现时&#xff0c;可使用App离线SDK开发原生插件来…

改进的A*算法的路径规划(2)

子节点优化选择策略 (1)子节点选择方式 为了找到从起始点到终点的路径&#xff0c;需定义一种可以选择后续节点的方式。在 A*算法中两种常见的方法为4-邻接(见图5-7(a) 和8-邻接(见图5-7(b)), 但考虑到 在复杂越野环境上&#xff0c;我们希望智能车辆允许更多的自由运动来更…

文件传输加速,这些aspera替代方案比你想象中还要好用

文件传输对于企业的业务来说是至关重要的&#xff0c;例如&#xff1a;多媒体制作、数据备份、云存储等。但是传统的文件传输方式&#xff0c;如FTP、SCP、HTTP甚至RSYNC&#xff0c;往往因为文件大小过大或者网络延迟等原因导致传输速度缓慢&#xff0c;给企业带来了极大的影响…

FTP、U盘等传统数据安全摆渡方法的6个弊端

数据安全摆渡&#xff0c;即数据在不同的网络之间&#xff0c;进行安全流转。做网间隔离的初衷&#xff0c;就是为了保护数据安全&#xff0c;但是在数据摆渡时&#xff0c;除了安全&#xff0c;企业还是需要考虑其他的要素&#xff0c;比如可靠性、易用性、兼容性等等。而传统…

【强化学习-读书笔记】多臂赌博机 Multi-armed bandit

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto强化学习与监督学习 强化学习与其他机器学习方法最大的不同&#xff0c;就在于前者的训练信号是用来评估&#xff08;而不是指导&#xff09;给定动作的好坏的。 …

酒店管理平台

SSM MySQL Spring SecurityLayui等技术实现的管理系统 技术栈 后端&#xff1a; 核心框架&#xff1a;SSM 持久层框架&#xff1a;MyBatis 权限框架&#xff1a;Spring Security 分页插件&#xff1a;PageHelper 数据库&#xff…

react中img引入本地图片的方式

在html文件中&#xff0c;可以直接<img src./roadBook.png /> 但是在jsx文件中&#xff0c;不支持这种写法 必须这样写 在css样式中 App.css .img{background: url(./img/roadBook.png) }App.js import ./App.css;<div classNameimg></div> 1.基于es6Mod…