力扣0093——复原ip地址

复原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 中的任何数字。你可以按 任何 顺序返回答案。

示例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 t a r t start start 和片段数 c o u n t count count,使用长度为4的数组记录每个片段对应的整数,初始时 c o u n t = 0 count = 0 count=0 s t a r t = 0 start = 0 start=0,对于每个片段,只有不含有前导零且对应的整数范围在 [ 0 , 255 0,255 0,255],才可能是有效的ip地址

  • 如果 c o u n t = 4 count=4 count=4,则只有s遍历结束之后才能得到有效的ip地址,当 s t a r t = n start=n start=n 时,字符串s遍历结束,根据数组中的整数生成ip地址并添加到答案中
  • 如果 c o u n t < 4 count<4 count<4,则当前片段对应的编号为 c o u n t count count,用end表示当前片段的结束下标,用 s s s[ s t a r t : e n d start:end start:end]$ 来表示字符串的下标范围 [ s t a r t , e n d start,end start,end] 的子数组,将endstartn-1依次遍历,执行如下操作:
    • 如果 s s s[ s t a r t : e n d start:end start:end]$ 不含有前导零且对应的整数在范围[ 0 , 255 0,255 0,255]则当前片段可能是有效 IP 地址的一个片段,将当前片段对应的整数填入数组的下标count中,继续对下一个片段回溯,下一个片段的起始下标是 e n d + 1 end + 1 end+1,下一个片段的片段数是 c o u n t + 1 count + 1 count+1
    • 如果 s s s[ s t a r t : e n d start:end start:end]$ 含前导零或对应的整数不在范围[ 0 , 255 0,255 0,255]则当前片段不可能是有效 IP 地址的一个片段,如果继续将end向右移动则当前片段一定不符合有效 IP 地址的规则,因此结束对当前start的回溯

回溯结束时,即可得到所有可能的有效 IP 地址。

想法代码

using System.Text;class Solution
{int n; string s; static int maxAdd = 4;int[] ipArr = new int[maxAdd];IList<string> ipAddress = new List<string>();public static void Main(String[] args){string s = "25525511135";Solution solution = new Solution();IList<string> ans = solution.RestoreIpAddresses(s);foreach (string ip in ans){Console.WriteLine(ip);}}public IList<string> RestoreIpAddresses(string s){this.n = s.Length;this.s = s;if (n < maxAdd || n > 3 * maxAdd){return ipAddress;}BackTrack(0, 0);return ipAddress;}public void BackTrack(int start, int count){if (count == maxAdd){if (start == n){ipAddress.Add(Convert(ipArr));}}else{bool flag = true;for (int end = start; end < n && flag; end++){if (Valid(start, end)){ipArr[count] = int.Parse(s.Substring(start, end - start + 1));BackTrack(end + 1, count + 1);}else{flag = false;}}}}public string Convert(int[] ipArr){StringBuilder sb = new StringBuilder();sb.Append(ipArr[0]);for (int i = 1; i < maxAdd; i++){sb.Append('.');sb.Append(ipArr[i]);}return sb.ToString();}public bool Valid(int start, int end){int length = end - start + 1;if (length < 1 || length > 3){return false;}if (length > 1 && s[start] == '0'){return false;}return int.Parse(s.Substring(start, end - start + 1)) <= 255;}
}

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

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

相关文章

Mac安装nvm,安装多个不同版本node,指定node版本

一.安装nvm brew install nvm二。配置文件 touch ~/.zshrc echo export NVM_DIR~/.nvm >> ~/.zshrc echo source $(brew --prefix nvm)/nvm.sh >> ~/.zshrc三.查看安装版本 nvm -vnvm常用命令如下&#xff1a;nvm ls &#xff1a;列出所有已安装的 node 版本nvm…

【网络】传输层TCP协议 | 三次握手 | 四次挥手

目录 一、概述 2.1 运输层的作用引出 2.2 传输控制协议TCP 简介 2.3 TCP最主要的特点 2.4 TCP连接 二、TCP报文段的首部格式 三、TCP的运输连接管理 3.1 TCP的连接建立(三次握手) 3.2 为什么是三次握手&#xff1f; 3.3 为何两次握手不可以呢&#xff1f; 3.4 TCP的…

AF647 二苯并环辛炔,AF647-DBCO,一种明亮且可感光的远红色染料

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;AF647 二苯并环辛炔&#xff0c;AF647 DBCO&#xff0c;Alexa Fluor 647 DBCO&#xff0c;AF647-二苯并环辛炔&#xff0c;AF647-DBCO 一、基本信息 产品简介&#xff1a;Alexa Fluor 647是一种独特的远红色染料&am…

js获取html中的img标签,图片标签,提取src属性并替换操作

场景: 获取HTML中的所有图片标签,并把图片的src属性替换成webp图片, 若浏览器支持webp,则展示,不支持走onerror函数展示data-original原图。 function getDetailWebp(htmlStr, width= 600){if(!htmlStr) return ;var reg = /<img[^>]+src=[\|\"]?([^(?"…

2024-01-24-redis4

秒杀活动 需求&#xff1a;库存中有10件商品 商品的信息自定义 同时有100个人去抢购&#xff08;这里100个人的抢购由jmeter来模拟&#xff09; jmeter的使用 在idea中将后台代码实现 package org.aaa.controller;import org.apache.commons.lang3.StringUtils; import org.sp…

ORBSLAM3 运行流程 以rgbd_tum.cc函数为例进行分析

一、运行 使用的是D435i相机自己录制的数据。 运行命令&#xff1a; ./Examples/RGB-D/rgbd_tum /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Vocabulary/ORBvoc.txt /opt/vslam/ORB_SLAM3_detailed_comments-dense_map_new/Examples/RGB-D/TUM1.yaml /opt/vsl…

docker-compose部署单机ES+Kibana

记录部署的操作步骤 准备工作编写docker-compose.yml启动服务验证部署结果 本次elasticsearch和kibana版本为8.2.2 使用环境&#xff1a;centos7.9 本次记录还包括&#xff1a;安装elasticsearch中文分词插件和拼音分词插件 准备工作 1、创建目录和填写配置 mkdir /home/es/s…

基于springboot网上图书商城源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上图书商城的网络应用&#xff0c;在外国网上图书商城已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。网上图书商城具有网上图书信息管理功能的选择…

Spring Security的入门案例!!!

一、导入依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--security--><dependency><groupId>…

laravel框架项目对接小程序实战经验回顾

一.对接小程序总结 1.状态转换带来的问题&#xff0c;如下 问题原因&#xff1a;由于status 传参赋值层级较多&#xff0c;导致后续查询是数组但是传参是字符串&#xff0c; 解决方案&#xff1a;互斥的地方赋值为空数组&#xff0c;有状态冲突的地方unset掉不需要的参数 2参…

【数据结构1-1】线性表

线性表是最简单、最基本的一种数据结构&#xff0c;线性表示多个具有相同类型数据“串在一起”&#xff0c;每个元素有前驱&#xff08;前一个元素&#xff09;和后继&#xff08;后一个元素&#xff09;。根据不同的特性&#xff0c;线性表也分为数组&#xff08;vector&#…

代码随想录算法训练营DAY6 | 哈希表(1)

DAY5休息一天&#xff0c;今天重启~ 哈希表理论基础&#xff1a;代码随想录 Java hash实现 &#xff1a;java 哈希表-CSDN博客 一、LeetCode 242 有效的字母异位词 题目链接&#xff1a;242.有效的字母异位词 思路&#xff1a;设置字典 class Solution {public boolean isAnag…

分布式事务:2PC、3PC、TCC、zab协议回顾

2PC&#xff1a;两阶段提交协议。 事务分为提交和执行两个阶段。 阶段一&#xff1a;协调者发送事务的请求到事务的执行方&#xff0c;执行方执行事务并记录undo和redo&#xff0c;但不提交事务。然后返回执行情况。 阶段二&#xff1a;协调者发送提交事务请求到各执行方&…

“语法糖“

在计算机编程中&#xff0c;"语法糖"是指一种编程语言的语法特性或语法结构&#xff0c;它在语法上提供了更简洁、易读、易写的方式来表达某些常见的操作或模式&#xff0c;而不是引入新的功能或概念。语法糖是一种语法上的改进&#xff0c;旨在使代码更加清晰和易于…

shell脚本5 函数 数组

函数 试题1 查看版本 如果想更方便&#xff0c;可以建立一个专门存函数的文件 将func.sh里面的命令都移到func文件夹里面&#xff0c;在脚本里面执行文件夹更方便 输入echo $?反馈的结果都是0&#xff0c;都认为是正确的 无法使用$?去检验是否正确&#xff0c;所以要在后面增…

【Java反序列化】Shiro-550漏洞分析笔记

目录 前言 一、漏洞原理 二、Shiro环境搭建 三、Shiro-550漏洞分析 解密分析 加密分析 四、URLDNS 链 前言 shiro-550反序列化漏洞大约在2016年就被披露了&#xff0c;在上学时期也分析过&#xff0c;最近在学CC链时有用到这个漏洞&#xff0c;重新分析下并做个笔记&…

代码随想录算法训练营第十九天|654 最大二叉树、617 合并二叉树、700 二叉搜索树中的搜索、98 验证二叉搜索树

654 最大二叉树 题目链接&#xff1a;最大二叉树 思路 这道题目是让我们构造最大二叉树并返回根节点。谈及二叉树&#xff0c;首先要确定遍历方式&#xff0c;这道题目一个符合思维的遍历方式是前序遍历(中左右)&#xff0c;先有中间节点&#xff0c;然后递归构造左节点和右…

LocalContainerEntityManagerFactoryBean源码

是 Spring Data JPA 中的一个类&#xff0c;它用于创建 EntityManagerFactory 的实例&#xff0c;获取EntityManager实例 public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManagerFactoryBeanimplements ResourceLoaderAware, LoadTimeWeaverAwar…

Java 集合 04 综合练习-查找用户是否存在

练习、 代码&#xff1a; public class User{private String id;private String username;private int password;public User() {}public User(String id, String username, int password) {this.id id;this.username username;this.password password;}public String getI…

Linux提权:Docker组挂载 Rsync未授权 Sudo-CVE Polkit-CVE

目录 Rsync未授权访问 docker组挂载 Sudo-CVE漏洞 Polkit-CVE漏洞 这里的提权手法是需要有一个普通用户的权限&#xff0c;一般情况下取得的webshell权限可能不够 Rsync未授权访问 Rsync是linux下一款数据备份工具&#xff0c;默认开启873端口 https://vulhub.org/#/envir…