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

相关文章

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Linux配置IP地址的三种实现方式

《Linux配置IP地址的三种实现方式》:本文主要介绍Linux配置IP地址的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录环境RedHat9第一种安装 直接配置网卡文件第二种方式 nmcli(Networkmanager command-line

通过ibd文件恢复MySql数据的操作方法

《通过ibd文件恢复MySql数据的操作方法》文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并... 目录第一种情况:知道表结构第二种情况:不知道表结构总结今天干了一件大事,安装1Panel导致原来服务

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

《mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据》文章主要介绍了如何从.frm和.ibd文件恢复MySQLInnoDB表结构和数据,需要的朋友可以参... 目录一、恢复表结构二、恢复表数据补充方法一、恢复表结构(从 .frm 文件)方法 1:使用 mysq

mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespace id不一致处理

《mysql8.0无备份通过idb文件恢复数据的方法、idb文件修复和tablespaceid不一致处理》文章描述了公司服务器断电后数据库故障的过程,作者通过查看错误日志、重新初始化数据目录、恢复备... 周末突然接到一位一年多没联系的妹妹打来电话,“刘哥,快来救救我”,我脑海瞬间冒出妙瓦底,电信火苲马扁.