博客
关于我
【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/

    你可能感兴趣的文章
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOI-1.3-11-计算浮点数相除的余数
    查看>>
    noi.ac #36 模拟
    查看>>
    NOI2010 海拔(平面图最大流)
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>
    NOIP2014 提高组 Day2——寻找道路
    查看>>
    noip借教室 题解
    查看>>
    NOIP模拟测试19
    查看>>
    NOIp模拟赛二十九
    查看>>
    Vue3+element plus+sortablejs实现table列表拖拽
    查看>>
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    non linear processor
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>