博客
关于我
【LeetCode 中等题】48-复原IP地址
阅读量:302 次
发布时间:2019-03-01

本文共 1689 字,大约阅读时间需要 5 分钟。

解决这个问题,首先需要理解IP地址的结构。标准的IP地址由四个八位数字组成,每部分范围在0到255之间。给定一个字符串,我们需要将其分割成四个部分,每个部分都必须是一个有效的八位数。

方法思路

我们可以使用暴力法来尝试所有可能的分割方式。具体步骤如下:

  • 检查边界条件:如果字符串为空,长度超过12或不足4,直接返回空列表。
  • 初始化结果列表:用于存储所有可能的有效IP地址。
  • 遍历所有可能的分割方式:使用四个循环变量a, b, c, d,分别控制每个分段的长度,确保它们的总和等于字符串长度。
  • 检查每个分段的有效性:每个分段必须是一个有效的八位数,范围在0到255之间。
  • 生成IP地址:如果所有分段都有效,组合成IP地址并添加到结果列表中。
  • 去重:防止重复IP地址进入结果列表。
  • 解决代码

    class Solution(object):    def restoreIpAddresses(self, s):        """Return a list of all possible IP addresses from the given string."""        if not s or len(s) > 12 or len(s) < 4:            return []        result = []        for a in range(1, 4):            for b in range(1, 4):                for c in range(1, 4):                    for d in range(1, 4):                        if a + b + c + d != len(s):                            continue                        parts = [                            s[:a],                            s[a:a+b],                            s[a+b:a+b+c],                            s[a+b+c:a+b+c+d]                        ]                        try:                            ip = [                                int(part) for part in parts                            ]                        except:                            continue                        if all(0 <= x <= 255 for x in ip):                            ip_str = '.'.join(map(str, ip))                            if ip_str not in result:                                result.append(ip_str)        return result

    代码解释

  • 边界检查:首先检查字符串是否为空、过长或过短,直接返回空列表。
  • 变量初始化:初始化结果列表result
  • 四层循环:分别遍历四个分段的可能长度,确保总长度等于字符串长度。
  • 分割字符串:将字符串分割成四个部分,并尝试转换为整数。
  • 有效性检查:每个部分必须在0到255之间,否则跳过。
  • 生成IP地址:将有效的四个部分组合成IP地址,并添加到结果列表中,避免重复。
  • 这种方法虽然简单,但在实际应用中效率尚可,特别是当字符串长度较短时。

    转载地址:http://vufo.baihongyu.com/

    你可能感兴趣的文章
    Oracle闪回技术(Flashback)
    查看>>
    oracle隐含参数的查看与修改
    查看>>
    oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
    查看>>
    oracle零碎要点---oracle em的web访问地址忘了
    查看>>
    Oracle零碎要点---多表联合查询,收集数据库基本资料
    查看>>
    Oracle静默安装
    查看>>
    【Bert101】变压器模型背后的复杂数学【02/4】
    查看>>
    Oracle面试题:Oracle中truncate和delete的区别
    查看>>
    ThreadLocal线程内部存储类
    查看>>
    thinkphp 常用SQL执行语句总结
    查看>>
    Oracle:ORA-00911: 无效字符
    查看>>
    Text-to-Image with Diffusion models的巅峰之作:深入解读 DALL·E 2
    查看>>
    Tensorflow.python.framework.errors_impl.ResourceExhaustedError:无法分配内存[操作:AddV2]
    查看>>
    TCP基本入门-简单认识一下什么是TCP
    查看>>
    tableviewcell 中使用autolayout自适应高度
    查看>>
    Symbolic Aggregate approXimation(SAX,符号聚合近似)介绍-ChatGPT4o作答
    查看>>
    Orcale表被锁
    查看>>
    svn访问报错500
    查看>>
    sum(a.YYSR) over (partition by a.hy_dm) 不需要像group by那样需要分组函数。方便。
    查看>>
    ORCHARD 是什么?
    查看>>