首页 > 编程语言 >代码随想录算法训练营第二十八天|93. 复原 IP 地址

代码随想录算法训练营第二十八天|93. 复原 IP 地址

时间:2023-06-06 14:25:40浏览次数:47  
标签:子串 index return IP self 随想录 start num 93

【参考链接】

93. 复原 IP 地址

【注意】

1.切割问题就可以使用回溯搜索法把所有可能性搜出来。

2.startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。

3.本题我们还需要一个变量pointNum,记录添加逗点的数量。

4.分割的段数作为终止条件。pointNum表示逗点数量(决定了树的深度),pointNum为3说明字符串分成了4段了。

5.循环中 [startIndex, i] 这个区间就是截取的子串,需要判断这个子串是否合法。如果合法就在字符串后面加上符号.表示已经分割。

6.左闭右闭。

【代码】

 

 1 class Solution(object):
 2     def __init__(self):
 3         self.result = []
 4     def restoreIpAddresses(self, s):
 5         """
 6         :type s: str
 7         :rtype: List[str]
 8         """
 9         '''
10         本质切割问题使用回溯搜索法,本题只能切割三次,所以纵向递归总共四层
11         因为不能重复分割,所以需要start_index来记录下一层递归分割的起始位置
12         添加变量point_num来记录逗号的数量[0,3]
13         '''
14         if len(s) > 12:
15             return []
16         #递归回溯
17         self.backtracking(s,0,0)
18         return self.result
19     
20     def backtracking(self,s,start_index,point_num):
21         if point_num == 3:
22             if self.is_valid(s, start_index, len(s)-1):#判断最后一个子串段是否满足
23                 self.result.append(s[:])
24             return
25 
26         for i in range(start_index, len(s)):
27             # [start_index, i]就是被截取的子串
28             if self.is_valid(s, start_index, i):
29                 s = s[:i+1]+'.'+s[i+1:]
30                 # 在填入.后,下一子串起始后移2位
31                 self.backtracking(s,i+2,point_num+1)
32                 # 回溯
33                 s = s[:i+1]+s[i+2:]
34             else:
35                 # 若当前被截取的子串大于255或者大于三位数,直接结束本层循环
36                 break
37 
38     def is_valid(self,s,start,end):
39         if start > end:
40             return False
41          # 若数字是0开头,不合法
42         if s[start] == '0' and start != end:
43             return False
44         if not 0 <= int(s[start:end+1]) <= 255:
45             return False
46         return True

 

标签:子串,index,return,IP,self,随想录,start,num,93
From: https://www.cnblogs.com/wuyijia/p/17459785.html

相关文章

  • How do you display code snippets in MS Word preserving format and syntax highlig
    HowdoyoudisplaycodesnippetsinMSWordpreservingformatandsyntaxhighlighting?回答1Hereisthebestway,forme,toaddcodeinsideword:GotoInserttab,Textsection,clickObjectbutton(it'sontheright)ChooseOpenDocumentTextwhic......
  • 最完美WIN11_Pro_22H2.22631.1830软件选装纯净版VIP41.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_PRO_22H2.22631.1830。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.1830。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • 使用Eclipse构建Maven的SpringMVC项目
    使用Eclipse构建Maven的SpringMVC项目      首先Eclipse需要安装Maven的插件,地址:http://m2eclipse.sonatype.org/sites/m2e。     用MyEclipse安装Maven插件,建出的Maven项目有些问题。一是,发布tomcat的时候resources总是不会被发布到tomcat下;二是,把WEB-INF下的cla......
  • TCP/IP,http,socket,长连接,短连接
    先看图:  TCP/IP是什么?   TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。  在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。  在传输层中有TCP协议与UDP协议。  在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。   Socket是什么呢? Soc......
  • java反编译工具jd-gui和插件jd-eclipse,还有插件Enhanced Class Decompiler 3.3.0
    JD-GUI和JD-ECLIPSE可以直接在下面的网址进行下载http://java-decompiler.github.io/ (1)注意:JD-GUI.exe单机版有很多版本,有些旧版本反编译出来的源码和高版本反编译出来的源码是区别的1.低版本的反编译可能和实际源码有出入2.1.6.6版本反编译的源码中有中文无法正常复制? ......
  • 什么是Socks5代理IP,如何选择Socks5代理IP
      Socks5代理IP是一种常用的网络工具,可以为用户提供更安全和匿名的网络连接。本文将介绍什么是Socks5代理IP以及它的工作原理。同时,我们还将提供一些选择Socks5代理IP的关键因素和指南,以帮助用户在众多选项中做出明智的选择。  在当今互联网时代,网络安全和个人隐私保护变得......
  • 关于用eclipse 开发 vue项目
    步骤:1、下载node的插件  2、下载vue插件 3、部署  ......
  • 解决Eclipse中.properties文件中文乱码问题
    在.properties文件写注释时,发现中文乱码了,由于之前在idea中有见设置.properties文件的编码类型,便找了找乱码原因在中文操作系统中,Eclipse中的Java类型文件的编码的默认设置是GBK,但是对Properties资源文件的编码的默认设置是ISO-8859-1。所以编辑Java文件中的中文不会出现问题,但编......
  • socket工作与TCP/IP的哪一层?
      要想明白Socket,必须要理解TCP连接。TCP三次握手:握手过程中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP连接一旦建立,在通讯双方中的任何一方主动断开连接之前TCP连接会一直保持下去。Socket 是对TCP/IP协议的封装,Socket只是个接口不是协议,通过S......
  • macOS Sonoma 发布,全面提升生产力和创意工作流(ISO、IPSW、PKG 下载)
    macOSSonoma发布,全面提升生产力和创意工作流(ISO、IPSW、PKG下载)本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。请访问原文链接:https://sysin.org/bl......