LintCode 恢复IP地址

2024-09-02 17:08
文章标签 ip 恢复 地址 lintcode

本文主要是介绍LintCode 恢复IP地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给一个由数字组成的字符串。求出其可能恢复为的所有IP地址。

样例
给出字符串 “25525511135”,所有可能的IP地址为:

[
“255.255.11.135”,
“255.255.111.35”
]

和LintCode 电话号码的字母组合类似。
首先找到合适的位数组合。一共4位,每一位的长度要大于等于1,小于等于3,且4位和为字符串长度.
另外要判断每1 位的数字组合,是否合乎规则,比如不能超过255,不能0开头。

class Solution:"""@param: s: the IP string@return: All possible valid IP addresses"""def restoreIpAddresses(self, s):# write your code heren=len(s)a=""  #记录每一位的长度。此处用字符串来记录,导致后面判断时类型转换很繁琐。但是直接用list来存数字,在递归的时候数据传递有点问题,是我对python的不太理解导致,这个问题有待解决。result=[]self.work(n,a,result,s)return resultdef work(self,n,a,result,s):if len(a)==3:num4=n-int(a[0])-int(a[1])-int(a[2])if num4<=3 and num4>=1 :a+=str(num4)print atemp=self.judge(a,n,s)if temp!='#':result.append(temp)a=a[:-1]return for x in range(1,4):a+=str(x)self.work(n,a,result,s)a=a[:-1]def judge(self,a,n,s):if int(s[:int(a[0])])>255 or int(s[int(a[0]):int(a[0])+int(a[1])])>255 or\int(s[int(a[0])+int(a[1]):int(a[0])+int(a[1])+int(a[2])])>255 or int(s[int(a[0])+int(a[1])+int(a[2]):])>255:return '#'elif (s[:int(a[0])][0]=='0' and a[0]!='1') or\(s[int(a[0]):int(a[0])+int(a[1])][0]=='0' and a[1]!='1') or\(s[int(a[0])+int(a[1]):int(a[0])+int(a[1])+int(a[2])][0]=='0' and a[2]!='1') or\(s[int(a[0])+int(a[1])+int(a[2]):][0]=='0' and a[3]!='1'):return '#'else:return s[:int(a[0])]+'.'+s[int(a[0]):int(a[0])+int(a[1])]+'.'+\s[int(a[0])+int(a[1]):int(a[0])+int(a[1])+int(a[2])]+'.'+s[int(a[0])+int(a[1])+int(a[2]):]

上面代码中那个注释的问题,解决了,原因就是list的问题。在work函数中,对存储数字的list进行操作时,复制一个新的list就行了。代码如下:

class Solution:"""@param: s: the IP string@return: All possible valid IP addresses"""def restoreIpAddresses(self, s):# write your code heren=len(s)a=[]result=[]self.work(n,a,result,s)return resultdef work(self,n,b,result,s):a=list(b)  #相当于又构建了一个列表,这样对其修改就不会影响原来的列表。注意直接a=b是不行的,可以利用id(a),id(b)实际观察一下,很清楚。if len(a)==3:num4=n-a[0]-a[1]-a[2]if num4<=3 and num4>=1 :a.append(num4)print atemp=self.judge(a,n,s)if temp!='#':result.append(temp)a=a[:-1]return for x in range(1,4):a.append(x)self.work(n,a,result,s)a=a[:-1]def judge(self,a,n,s):if int(s[:a[0]])>255 or int(s[a[0]:a[0]+a[1]])>255 or\int(s[a[0]+a[1]:a[0]+a[1]+a[2]])>255 or int(s[a[0]+a[1]+a[2]:])>255:return '#'elif (s[:a[0]][0]=='0' and a[0]!=1) or\(s[a[0]:a[0]+a[1]][0]=='0' and a[1]!=1) or\(s[a[0]+a[1]:a[0]+a[1]+a[2]][0]=='0' and a[2]!=1) or\(s[a[0]+a[1]+a[2]:][0]=='0' and a[3]!=1):return '#'else:return s[:a[0]]+'.'+s[a[0]:a[0]+a[1]]+'.'+\s[a[0]+a[1]:a[0]+a[1]+a[2]]+'.'+s[a[0]+a[1]+a[2]:]

这篇关于LintCode 恢复IP地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130559

相关文章

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

Exchange 服务器地址列表的配置方法与注意事项

Exchange Server 是微软推出的一款企业级邮件服务器软件,广泛应用于企业内部邮件系统的搭建与管理。配置 Exchange 服务器地址列表是其中一个关键环节。本文将详细介绍 Exchange 服务器地址列表的配置方法与注意事项,帮助系统管理员顺利完成这一任务。 内容目录 1. 引言 2. 准备工作 3. 配置地址列表 3.1 创建地址列表 3.2 使用 Exchange

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到