题目

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。示例:输入: "25525511135"
输出: ["255.255.11.135", "255.255.111.35"]

解决方法

    //回溯用LinkedList<String> linkedList = new LinkedList<>();//保存结果用List<String> result = new ArrayList<>();public List<String> restoreIpAddresses(String s) {dfs(s,0,0);return result;}public void dfs(String string,int dort,int curIndex){//判断点的个数 如果是3个点 都满足 那么就是真的ip地址 // 回溯   结束的条件 就是具备三个点//对于每一个点  各种情况  如果说其中有一个后续直接不满足 回溯//如果当前的index 超过了字符串的长度  返回if (curIndex >= string.length()) {return;}//如果当前的字符串是0 那么后面就不能增加字符串了,因为不能出现01.01.01.01 这种int max = string.charAt(curIndex) == '0' ? 1 : 3;for (int i = 1; i <= max; i++) {//保证不要超过整个字符串大小if (curIndex + i > string.length()) {continue;}//截取字符串String substring = string.substring(curIndex, curIndex + i);//如果是合理的字符串 (0<x <255)if (!isInvalidate(substring)) {continue;}//增加linkedList.add(substring);//如果是第三个点 那么就是结束的时候了if (dort == 3) {//如果当前的长度是整个数组的长度 那么就是结束的时候了if (curIndex + substring.length() == string.length()) {//添加结果String join = String.join(".", linkedList);result.add(join);}}else {//如果不是最后一个点  那么添加下一个点dfs(string,dort + 1,curIndex + substring.length());}//回溯linkedList.pollLast();}}public boolean isInvalidate(String string){return string.length() <= 3  && Integer.parseInt(string) <= 255;}

题解参考:
https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html#%E5%9B%9E%E6%BA%AF%E4%B8%89%E9%83%A8%E6%9B%B2

第二次又刷到 尽然没有做出来:

    public List<String> restoreIpAddresses(String s) {List<String> result = new ArrayList<>();backTrace(s,0,0,result);return result;}public void backTrace(String s,int curIndex,int count,List<String> result){if (count == 3){if (isValiad(s,curIndex,s.length()-1)){result.add(s);}return;}for (int i = curIndex ; i < s.length(); i++) {if (isValiad(s,curIndex,i)){s = s.substring(0,i+1) + "." + s.substring(i + 1);backTrace(s,i+2,count+1,result);s = s.substring(0,i+1)  + s.substring(i + 2);}else {break;}}}public boolean isValiad(String s , int start ,int end){if (start > end) {return false;}if (end - start > 3){return false;}if (s.charAt(start) == '0' && start != end) {return false;}//<255int num = 0;for (int i = start; i <= end; i++) {if (s.charAt(i) > '9' || s.charAt(i) < '0') { // 遇到⾮数字字符不合法return false;}num = num * 10 + (s.charAt(i) - '0');if (num > 255) { // 如果⼤于255了不合法return false;}}return true;}

回溯算法-----复原IP地址(Java版本)相关推荐

  1. 回溯算法——复原IP地址(Leetcode 93)

    题目选自Leetcode 93.复原IP地址 由于我们需要找出所有可能复原出的 IP 地址,因此可以考虑使用回溯的方法,对所有可能的字符串分隔方式进行搜索,并筛选出满足要求的作为答案. 通俗来讲,就是 ...

  2. java实现复原IP地址,回溯算法:复原IP地址

    93.复原IP地址 题目地址:https://leetcode-cn.com/problems/restore-ip-addresses/ 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地 ...

  3. LeetCode 93. 复原 IP 地址【字符串,回溯算法】

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

  4. 93. 复原 IP 地址

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

  5. [LeetCode] Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  6. 007.复原 IP 地址

    1.题目链接: 93. 复原 IP 地址 2.解题思路: 2.1.题目要求: 给定一串只包含数字的字符串s,返回所有让 s 构成 有效IP地址 的数字组合. 有IP地址: 4个 [0,255] 范围内 ...

  7. LeetCode 第 93 题:复原IP地址(C++)

    93. 复原IP地址 - 力扣(LeetCode) 最开始的思路是对字符串进行三次切割,每次从左边切一块下来(最多切3位数). 那么我们现在有三个切割点(下标) i, j, k,它们应该满足: n=s ...

  8. leetcode:491. 递增子序列、17. 电话号码的字母组合、31. 分割回文串、93. 复原 IP 地址(JavaScript)

    文章目录 491. 递增子序列 分析 去重 如何保证递增呢? 17. 电话号码的字母组合 思路: 单层递归逻辑 递归终止条件 完整代码 另一种写法 31. 分割回文串 思路:分析题目本题可分为两步 9 ...

  9. [LeetCode] Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

最新文章

  1. Python学习的十个阶段,学完大成,对应一下看看你自己在哪个阶段
  2. Base:一种 Acid 的替代方案
  3. 听说你想去大厂看妹子,带你看看美团后端开发实习岗详细面经
  4. centos上安装supervisor来管理dotnetcore等应用程序
  5. Struts2框架--学习笔记(上):搭建struts2工程、struts2基本概念、struts2对页面数据的操作
  6. boost::overwrite相关的测试程序
  7. java数据源是什么_《java数据源—连接池》
  8. linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记
  9. leetCode —— 1200.最小绝对差
  10. 从 2.4 到 2.6:Linux 内核可装载模块机制的改变对设备驱动的影响(二)
  11. python 打包_Python 打包指南
  12. xcode 4.5中设置程序名字多语言
  13. php转义还原,PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_PHP
  14. c语言最小公倍数最简单求法,c语言最小公倍数与最大公约数的求法集锦
  15. 【技术分享】Windows10下安装Nvidia显卡驱动及cuda和cudnn
  16. 自动读取短信中心号码
  17. 联通数据能力开放平台介绍
  18. 利用Web查询文件(.iqy)有效钓鱼
  19. potplayer默认专辑加载同一文件夹下所有视频,只读取一部分视频,加载视频目录不完整
  20. 浏览器上享受《速度与激情》,开发者花 16 个月用 JavaScript 造了一款驾驶游戏,水里也能开车!

热门文章

  1. linux网络配置总结,linux中的网络配置命令的总结
  2. python取特定年份的数据_python,_怎样用python提取不同股票csv里特定时间段的数据,python - phpStudy...
  3. python2和python3分别是python的两个版本_Windows下Python2与Python3两个版本共存的方法详解...
  4. 14、计算机图形学——whited-style光线追踪
  5. 网口相机设置自动复位时间(心跳时间)
  6. MFC消息响应函数OnPaint
  7. linux 负数_linux内核提权系列教程(2):任意地址读写到提权的4种方法
  8. 判断是不是一个数组?
  9. 用无人机打点作画,密集恐惧症患者慎入!
  10. js:如何在循环异步请求的每次返回中添加想要的值