(不会,典型)

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

示例:

  1. 输入: "25525511135"
  2. 输出: ["255.255.11.135", "255.255.111.35"]

1.回溯法+剪枝:

  1. public class Solution {
  2. public List<String> restoreIpAddresses(String s) {
  3. List<String> res = new ArrayList<String>();
  4. helper(s, 0, "", res);
  5. return res;
  6. }
  7. //res结果,s余下的输入字符串,out当前已经拼凑出来的字符串,n未处理的字段数(一个ip四个字段)
  8. public void helper(String s, int n, String out, List<String> res) {
  9. if (n == 4) {
  10. if (s.isEmpty()) res.add(out);
  11. return;
  12. }
  13. // 取k=1-3个数作为下一段
  14. for (int k = 1; k < 4; ++k) {
  15. if (s.length() < k) break;
  16. int val = Integer.parseInt(s.substring(0, k));
  17. if (val > 255 || k != String.valueOf(val).length()) continue;
  18. helper(s.substring(k), n + 1, out + s.substring(0, k) + (n == 3 ? "" : "."), res);
  19. }
  20. }
  21. }

自己写的时候

  1. if (val > 255 || k != String.valueOf(val).length()) continue;
    中缺少了k != String.valueOf(val).length()判断,
  1. 答案错误:您提交的程序没有通过所有的测试用例
  2. case通过率为1.37%
  3.  
  4. 用例:
  5. "010010"
  6.  
  7. 对应输出应该为:
  8.  
  9. ["0.10.0.10","0.100.1.0"]
  10.  
  11. 你的输出为:
  12.  
  13. ["0.1.0.010","0.1.00.10","0.1.001.0","0.10.0.10","0.10.01.0","0.100.1.0","01.0.0.10","01.0.01.0","01.00.1.0","010.0.1.0"]

這一句避免了010这样的数,Integer.parseInt(“010”) = 10

2.暴力求解法:

由于每段数字最多只能有三位,而且只能分为四段,所以情况并不是很多,我们可以使用暴力搜索的方法,每一段都循环1到3,然后当4段位数之和等于原字符串长度时,我们进一步判断每段数字是否不大于255,然后滤去不合要求的数字,加入结果中即可,参见代码如下;

  1. public class Solution {
  2. public List<String> restoreIpAddresses(String s) {
  3. List<String> res = new ArrayList<String>();
  4. for (int a = 1; a < 4; ++a)
  5. for (int b = 1; b < 4; ++b)
  6. for (int c = 1; c < 4; ++c)
  7. for (int d = 1; d < 4; ++d)
  8. if (a + b + c + d == s.length()) {
  9. int A = Integer.parseInt(s.substring(0, a));
  10. int B = Integer.parseInt(s.substring(a, a + b));
  11. int C = Integer.parseInt(s.substring(a + b, a + b + c));
  12. int D = Integer.parseInt(s.substring(a + b + c));
  13. if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
  14. String t = String.valueOf(A) + "." + String.valueOf(B) + "." + String.valueOf(C) + "." + String.valueOf(D);
  15. if (t.length() == s.length() + 3) res.add(t);
  16. }
  17. }
  18. return res;
  19. }
  20. }

【1】【leetcode-93】复原IP地址的更多相关文章

  1. Java实现 LeetCode 93 复原IP地址

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

  2. leetcode 93 复原IP地址

    IP地址,分成四段,每段是0-255,按照每段的长度分别为1,2,3下一段长度分别1,2,3再下一段......进行递归遍历,能满足条件的假如res中.比较难想到的就是假如有一段是三位的010是不符合 ...

  3. LeetCode 93. 复原IP地址(Restore IP Addresses)

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

  4. LeetCode:复原IP地址【93】

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

  5. leetcode刷题-93复原IP地址

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

  6. Leetcode 93.复制IP地址

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

  7. 93复原IP地址。

    from typing import List# 这道题不是很难,但是限制条件有很多.# 用递归的方法可以很容易的想到.只需要四层递归就好了.# 每次进行加上限制条件.过滤每一层就好了..class ...

  8. 93. 复原 IP 地址

    做题思路or感想 这种字符串切割的问题都可以用回溯法来解决 递归三部曲: 递归参数 因为要切割字符串,所以要用一个startIndex来控制子串的开头位置,即是会切割出一个范围是[startIndex ...

  9. 93. 复原IP地址

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

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

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

随机推荐

  1. 【XSY1538】连在一起的幻想乡 数学 无向连通图计数

    题目大意 ​ 给你\(n,p\),求\(n\)个点组成的所有无向连通图的边数的平方和模\(p\) ​ \(n\leq 2000,p\leq {10}^9\) 题解 ​ 设\(m=\frac{n(n-1 ...

  2. C# 成员默认访问权限(public、private、protected、internal)

    C# 成员默认访问权限(public.private.protected.internal) 来源 https://www.cnblogs.com/yezongjie/p/20181121Access ...

  3. thinkphp5.0.7 &===composer更新===& thinkphp5.0.9 debug “controller not found”

    当thinkphp5.0.7更新到最新版本时,问题来了... 控制类加载不了. 上线版本出现这个情况,也就悲哀了.====== 那么这种问题主要是因为 composer 没有合理的使用: 详细参考:如 ...

  4. 【 HDU3294 】Girls' research (Manacher)

    BUPT2017 wintertraining(15) #5F HDU - 3294 题意 给定字母x,字符串变换一下: 'x'-1 -> 'z', 'x'->'a', 'x'+1-> ...

  5. 洛谷P3222 [HNOI2012]射箭(计算几何,半平面交,双端队列)

    洛谷题目传送门 设抛物线方程为\(y=ax^2+bx(a<0,b>0)\),我们想要求出一组\(a,b\)使得它尽可能满足更多的要求.这个显然可以二分答案. 如何check当前的\(mid ...

  6. BSGS及扩展BSGS总结(BSGS,map)

    蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...

  7. HAOI2016 简要题解

    「HAOI2016」食物链 题意 现在给你 \(n\) 个物种和 \(m\) 条能量流动关系,求其中的食物链条数. \(1 \leq n \leq 100000, 0 \leq m \leq 2000 ...

  8. awk文本分析工具

    Usage:awk [option] 'program' file ... awk [option] -f progfile file ... [optin]: -F fs 指定输入分隔符,fs可是字 ...

  9. 20165223 Linux安装及命令入门

    预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. ...

  10. Redis高并发和快速的原因

    一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间:   3.redis使用多路复用技术,可以处理并发的连接 ...