码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 复原 IP 地址(回溯+剪枝)


    力扣地址:力扣

            有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

            例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。
            给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

    示例 1:

    输入:s = "25525511135"
    输出:["255.255.11.135","255.255.111.35"]

    示例 2:

    输入:s = "0000"
    输出:["0.0.0.0"]

    示例 3:

    输入:s = "101023"
    输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

    提示:

    1 <= s.length <= 20
    s 仅由数字组成

    示例代码:

    1. class Solution(object):
    2. def restore_ip_address(self, s):
    3. res = []
    4. def back_tracing(start, tmp):
    5. if len(tmp) > 4:
    6. return
    7. if start == len(s) and len(tmp) == 4:
    8. res.append('.'.join(tmp))
    9. for i in range(start, len(s)):
    10. # if int(s[start: i+1]) > 255 or s[start] == '0' and len(s[start: i+1]) >= 2: # 等价下述写法
    11. if int(s[start: i+1]) > 255 or (s[start] == '0' and len(s[start: i+1]) >= 2):
    12. return
    13. tmp.append(s[start: i+1])
    14. back_tracing(i+1, tmp)
    15. tmp.pop()
    16. back_tracing(0, [])
    17. return res
    18. s = "25525511135"
    19. s = "0000"
    20. obj = Solution()
    21. res = obj.restore_ip_address(s)
    22. print(res)

    思路解析:  【回溯+剪枝】

    • 步骤1:先想清楚这种字符串如何取出数字,以便可以通过递归取出所有可能的数字        
    • 步骤2:在字符串里,截取不同长度的字符,需要s[start:i+1]来取,因为不像纯数字列表,每种情况直接可以拿到[1, 23, 4]        
    • 步骤3:何时添加到结果?start到终点位置,且也找到了4个数,即添加结果        
    • 步骤4:剪枝操作:

            1.当截取的字符转换为数字后的值大于255,且出现为'06'这样的不合法情况                    

             2.当取的数大于4的时候,不符合IP的格式,直接返回 

  • 相关阅读:
    Navicat和SQLynx功能比较三(数据导出:使用MySQL近千万数据测试)
    【linux进程(二)】如何创建子进程?--fork函数深度剖析
    湖北初级(助理)、中级、高级(副高)工程类职称申报条件和业绩要求有哪些?
    js之原生ajax、Jquery-$.ajax、自定义ajax(post请求、get请求)
    视频监控/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,如何解决?
    代码随想录算法训练营第六十二天 | 84.柱状图中最大的矩形
    什么是 Rootkit?
    风力发电机监测 震动监测 故障监测
    【C++基础】【集成编译环境04】Visual Station 2022 项目集成【2】 Opencv 的库的项目集成和遇到的坑
    结构体内存对齐详解
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/127857549
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号