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

相关文章

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.