python 输入字符串生成所有有效的IP地址(LeetCode 93号题)


Posted in Python onOctober 15, 2020

这题的官方难度是Medium,点赞1296,反对505,通过率35.4%。从各项指标来说看起来有些中规中矩,实际上也的确如此。这道题的解法和立意都有些显得新意不足,但总体来说题目的质量还是可以的,值得一做。

题意

给定一个由数字组成的字符串,我们希望通过这个字符串得到所有有效ip地址的组合。对于一个有效的ip地址而言,它应该有4个数字组成,每一个数字的范围在0到255之间。

一个字符串可能可以转化成多个ip地址,我们需要存储下来所有可以成立的情况。

样例

Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]

题解

这道题的题意蛮新颖的,将字符串和ip地址结合在了一起,但是题目的内核说实话有些老生常谈了,都是那种将一个大局面转化成若干个小局面之和的情况。

我们之前做的全排列问题、八皇后问题等等都是这种,拿八皇后问题举例,看起来是我们要在棋盘上放置皇后。但实际上我们最终想要的结果是放置好了八个皇后之后的局面,这个局面是由放置了每一个皇后之后的小局面组合在一起构成的。所以本质上也可以看成是小局面组装成大局面的问题。

说了这么多,其实只为了说明一点,就是遇到这些大局面拆分小局面的问题,我们可以率先考虑搜索算法。搜索算法除了可以理解成在一个搜索空间或者是一棵搜索树当中寻找到解之外,也可以理解成可以用来寻找一些小局面的组合,让它们组合起来可以构成我们想要的大局面。

套用到这道题上来,很显然最后我们想要的大局面是合法的IP地址,而构成这个大局面的小局面则是构成IP地址的每一个数字。

这些都搞明白了之后,代码就很好写了:

class Solution:
  def restoreIpAddresses(self, s: str) -> List[str]:
    n = len(s)
    if n < 4 or n > 12:
      return []
    
    ret = []
    
    def dfs(cur, ips):
      # 如果递归结束,并且ips当中刚好存了4个ip
      # 则生成答案
      if cur >= n:
        if len(ips) == 4:
          ret.append('.'.join(ips[:]))
        return
      
      # 遍历下一个ip是几位
      for i in range(cur, min(cur+3, n)):
        # 如果超过1位但是第一位是0,那么非法
        if s[cur] == '0' and i > cur:
          return
        # ip必须小于等于255
        num = int(s[cur: i+1])
        if num > 255:
          return
        
        # 回溯
        ips.append(s[cur: i+1])
        dfs(i+1, ips)
        ips.pop()
        
    dfs(0, [])
    return ret

总结

有些新意但是思路中规中矩的搜索问题,熟悉dfs和回溯的话不会很难。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

以上就是python 输入字符串生成所有有效的IP地址(LeetCode 93号题)的详细内容,更多关于python 生成IP地址的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python模块学习 filecmp 文件比较
Aug 27 Python
Python中的pprint折腾记
Jan 21 Python
python结合API实现即时天气信息
Jan 19 Python
python目录与文件名操作例子
Aug 28 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python中标准库OS的常用方法总结大全
Jul 19 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
python 列表删除所有指定元素的方法
Apr 19 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Django配置Bootstrap, js实现过程详解
Oct 13 Python
用Python可视化新冠疫情数据
Jan 18 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 #Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 #Python
matplotlib教程——强大的python作图工具库
Oct 15 #Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 #Python
详解pycharm配置python解释器的问题
Oct 15 #Python
详解查看Python解释器路径的两种方式
Oct 15 #Python
几款Python编译器比较与推荐(小结)
Oct 15 #Python
You might like
xml+php动态载入与分页
2006/10/09 PHP
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
Jquery cookie操作代码
2010/03/14 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
Vue项目中配置pug解析支持
2019/05/10 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
Python中的pack和unpack的使用
2018/03/12 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
会计出纳岗位职责
2013/12/25 职场文书
安全生产检讨书
2014/01/21 职场文书
2014年人事部工作总结
2014/12/03 职场文书
推荐信范文大全
2015/03/27 职场文书
2015年党建工作总结
2015/03/30 职场文书
演讲开场白和结束语
2015/05/29 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
基于CSS3画一个iPhone
2021/04/21 HTML / CSS
Python实战之实现康威生命游戏
2021/04/26 Python
代码解析React中setState同步和异步问题
2021/06/03 Javascript