难度:中等
频次:62

题目:

有效 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 中的任何数字。你可以按 任何 顺序返回答案。

解题思路:DFS递归法+回溯<剪枝条件有点多>

注意:

  • 递归结束条件:temp数量为4了,并且start == s.length
  • 剪枝条件
    • temp数量为4了,但是start还没结束s的遍历
    • for循环里每次切分所得到的完整字符串不能越s的边界
    • for循环里 从start的位置切分时,如果切分的数量为2、3,那么第一位不能是0
    • for循环里 从start的位置切分时,如果切分数量位3时,3位数大小不能大于255
  • 最后得到的temp数组要转换成IP【StringBuilder】的格式(带.的长字符串),然后再添加到res里------这里有一个函数没怎么用 IP.deleteCharAt(n)
  • string转换成int Integer.parseInt(s);
  • 最后需要回溯,所以需要移除数组尾部刚添加的元素

代码

class Solution {//放的是最后修改过后的结果List<String> res=new ArrayList<>(); //放的是修改结果格式之前的数字数组,没有.List<String> temp=new ArrayList<>();public List<String> restoreIpAddresses(String s) {DFS(s,0);return res;}public void DFS(String s,int start){   //递归结束条件:start==s.length()-1 则说明经过上面的递归后,s还剩1位可以分配if(temp.size()==4&&start==s.length()){StringBuilder IP=new StringBuilder();for(String a:temp){IP.append(a).append(".");}//这个函数一般时候还真记不住IP.deleteCharAt(IP.length()-1);res.add(IP.toString());return;}//剪枝条件:1.如果temp.size==4&&start<s.length()if(temp.size()==4&&start<s.length()) return ;//切分 i=3是因为 每个ip的位置不能超过255   比如 123 start指向1 切分方式:1    12   123//最多四层for(int step=1;step<=3;step++){//切分的时候不能越界if(start+step-1>=s.length()) return;//2位和三位的时候--第一位不能是 01 022if(s.charAt(start)=='0'&&step!=1) return ;String smalltemp=s.substring(start,start+step);//如果裁剪出来的子字符串的数字比255大if(step==3&&Integer.parseInt(smalltemp)>255) return;temp.add(smalltemp);DFS(s,start+step);temp.remove(temp.size()-1);}}
}

多看看把,条件太多了--leetcode 93. 复原 IP 地址相关推荐

  1. LeetCode 93. 复原IP地址(回溯)

    1. 题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...

  2. leetcode 93. 复原IP地址 思考分析

    题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255之间组成,且不能含有前导 0),整数之间用 '.' 分隔. ...

  3. 142. Leetcode 93. 复原 IP 地址 (回溯算法-切割问题)

    分析剪枝条件: 1.一开始,字符串的长度小于 4 或者大于 12 ,一定不能拼凑出合法的 ip 地址(这一点可以一般化到中间结点的判断中,以产生剪枝行为); 2.每一个结点可以选择截取的方法只有 3 ...

  4. LeetCode 93. 复原IP地址

    思路: 回溯+剪枝 遍历字符串,先计算第一网段,分别取1 2 3位数字,并组合判断是否符合IP规范, 若符合跳至下一网段,并且索引start挪位,temp+本网段值+"." 递归 ...

  5. leetcode 93.复原IP地址 dfs解法

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

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

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

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

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

  8. leetcode系列-93.复原 IP 地址

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

  9. 【Leetcode | 1】93. 复原IP地址

    给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135", ...

最新文章

  1. linux下比较文件并输出,Linux使用diff命令比较文件找出文件之间相同的部分
  2. 2022 年计算机视觉的三大趋势
  3. RequireJs的使用和快速理解
  4. 拆解交易系统--服务稳定性
  5. comsol移动网格_将动网格模型迁移到 5.3a
  6. 单反相机内部光线反射原理
  7. android 热修复视频,Android热修复
  8. 云服务器饥荒_运用双腾讯云搭建《饥荒》多人联机服务器
  9. Gentoo搭建PPTP服务器
  10. 2017 linux wine 迅雷,Ubuntu+Wine+迅雷+QQ安装方法
  11. python文件批量改名
  12. 微信大会有哪些看点?
  13. 2022 高教社杯全国大学生数学建模竞赛获奖名单(初稿)
  14. 【COMSOL】Marzas 材料模型 C 源文件代码解析
  15. “AI骨龄医生”周年庆完美收官!武汉站引数百位儿科医生追捧
  16. python-GUI:利用pyqt5设计一个bootloader上位机页面(ZLG驱动)及打包报错faild to execute script pyi_rth_multiprocessing精简方案
  17. 今天看到一个不错的漫画网站(E文)
  18. android 图片格式 xvg,大势所趋,应用如何适配Android P HEIF图片格式
  19. nodejs安装和环境配置-Windows
  20. IT人士最容易得的癌症

热门文章

  1. Linux学习进阶路线图
  2. 美轮美奂宇宙星空制作神器Spacescape
  3. CDOJ_327 BerOS file system
  4. 文本编辑器Nano实用快捷键
  5. 清空表中数据 id从1开始
  6. c++中文件应用的一点小变化
  7. Java类加载文章1(z)
  8. AGC005D ~K Perm Counting
  9. 十个你需要在 PHP 7 中避免的坑
  10. Spring 事务不回滚