(不会,典型)

给定一个只包含数字的字符串,复原它并返回所有可能的 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. 【AGC002E】Candy Piles 博弈论

    题目大意 有\(n\)堆糖果,第\(i\)堆有\(a_i\)个. 两个人轮流决策,决策分为两种: 1.选择糖果数最多的一堆糖果,并把这堆糖全吃了. 2.在每堆非空的糖果堆里拿一颗糖吃掉. 吃掉最后一颗 ...

  2. MT【154】拉格朗日配方

    (清华2017.4.29标准学术能力测试24) 设$x,y\in\mathbb{R}$,函数$f(x,y)=x^2+6y^2-2xy-14x-6y+72$的值域为$M$,则______ A.$1\in ...

  3. 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...

  4. Codeforces Round #543 Div1题解(并不全)

    Codeforces Round #543 Div1题解 Codeforces A. Diana and Liana 给定一个长度为\(m\)的序列,你可以从中删去不超过\(m-n*k\)个元素,剩下 ...

  5. 使用template

    1.放置html片段模板 <script id="tpl" type="text/html"> <p>$title</p>& ...

  6. luogu3621 城池攻占 (倍增)

    好像所有人都写的左偏树 但我不会啊233 首先发现乘的时候 系数不会为负,所以能得到一个关键条件:变化后的战斗力随变化前的战斗力大小单调 所以我们考虑倍增 设hp[x][i]是从x开始一路攻克$2^i ...

  7. redis 指令文档

    参考:https://redis.io/commands http://www.runoob.com/redis/redis-lists.html redis: 打开一个 cmd 窗口 使用cd命令切 ...

  8. Git同步远程fork的项目

    通过fork创建的项目,如果远程仓库代码进行了更新,本地需要同步的话,可以在git上创建一个上游仓库 步骤 运行git remote add upstream https://github.com/O ...

  9. Django 项目内利用ORM直接运行脚本读库

    #导包 import os import sys #将脚本所在工程添加到环境变量 #绝对路径 # sys.path.append('c:/Users/nxy/www/mymac') #相对路径 sys ...

  10. Let's Encrypt:初次使用免费的ssl证书,并生成java用的 jks(keystore) 文件

    现在都流行 https,今天晚上花了二个小时,学习了一下,这里做个学习总结: 因为刚开始接触,就使用免费的:Let's Encrypt Let's Encrypt证书特点: 1. 现在主流的浏览器(c ...