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

    你可能感兴趣的文章
    postgresql 函数&存储过程 ; 递归查询
    查看>>
    PostgreSQL 分组聚合查询中 filter 子句替换 case when
    查看>>
    PostgreSQL 同步流复制锁瓶颈分析
    查看>>
    PostgreSQL 备份与还原命令 pg_dump
    查看>>
    Postgresql 外部表插件postgres_fdw的安装和使用
    查看>>
    PostgreSQL 如何从崩溃状态恢复(上)
    查看>>
    PostgreSQL 存储过程基本语法
    查看>>
    PostgreSQL 实现批量更新、删除、插入
    查看>>
    PostgreSQL 导入 .gz 备份文件
    查看>>
    PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
    查看>>
    PostgreSQL 新增数据返回自增ID
    查看>>
    postgresql 更新多列数据
    查看>>
    PostgreSQL 服务启动后停止
    查看>>
    PostgreSQL 辟谣存在任意代码执行漏洞:消息不实
    查看>>
    PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
    查看>>
    Qt开发——简易调色板QPalette
    查看>>
    PostgreSQL-解决连接时遇到的乱码问题
    查看>>
    PostgreSQL15.2最新版本安装_远程连接_Navicat操作_pgAdmin操作_Windows10上安装---PostgreSQL工作笔记001
    查看>>
    PostgreSQL9.1 双机部署配置(主备数据同步)
    查看>>
    Qt开发——简易网络浏览器(一)
    查看>>