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

    你可能感兴趣的文章
    Spring security之管理session
    查看>>
    paramiko模块
    查看>>
    param[:]=param-lr*param.grad/batch_size的理解
    查看>>
    spring mvc excludePathPatterns失效 如何解决spring拦截器失效 excludePathPatterns忽略失效 拦截器失效 spring免验证拦截器不起作用
    查看>>
    Spring Cloud 之注册中心 EurekaServerAutoConfiguration源码分析
    查看>>
    Parrot OS 6.2 重磅发布!推出全新 Docker 容器启动器
    查看>>
    Parrot OS 6.3 发布!全面提升安全性,新增先进工具,带来更高性能
    查看>>
    ParseChat应用源码ios版
    查看>>
    Part 2异常和错误
    查看>>
    Pascal Script
    查看>>
    Spring Boot集成Redis实现keyspace监听 | Spring Cloud 34
    查看>>
    Spring Boot中的自定义事件详解与实战
    查看>>
    Passport 密码模式
    查看>>
    Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)
    查看>>
    passport 简易搭配
    查看>>
    passwd命令限制用户密码到期时间
    查看>>
    Spring Boot 动态加载jar包,动态配置太强了!
    查看>>
    Spring @Async执行异步方法的简单使用
    查看>>
    PAT (Basic Level) Practice 乙级1021-1030
    查看>>
    PAT (Basic Level) Practice 乙级1031-1040
    查看>>