【1】【leetcode-93】复原IP地址
(不会,典型)
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
- 输入: "25525511135"
- 输出:
["255.255.11.135", "255.255.111.35"]
1.回溯法+剪枝:
- public class Solution {
- public List<String> restoreIpAddresses(String s) {
- List<String> res = new ArrayList<String>();
- helper(s, 0, "", res);
- return res;
- }
- //res结果,s余下的输入字符串,out当前已经拼凑出来的字符串,n未处理的字段数(一个ip四个字段)
- public void helper(String s, int n, String out, List<String> res) {
- if (n == 4) {
- if (s.isEmpty()) res.add(out);
- return;
- }
- // 取k=1-3个数作为下一段
- for (int k = 1; k < 4; ++k) {
- if (s.length() < k) break;
- int val = Integer.parseInt(s.substring(0, k));
- if (val > 255 || k != String.valueOf(val).length()) continue;
- helper(s.substring(k), n + 1, out + s.substring(0, k) + (n == 3 ? "" : "."), res);
- }
- }
- }
自己写的时候
- if (val > 255 || k != String.valueOf(val).length()) continue;
中缺少了k != String.valueOf(val).length()判断,
- 答案错误:您提交的程序没有通过所有的测试用例
- case通过率为1.37%
- 用例:
- "010010"
- 对应输出应该为:
- ["0.10.0.10","0.100.1.0"]
- 你的输出为:
- ["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,然后滤去不合要求的数字,加入结果中即可,参见代码如下;
- public class Solution {
- public List<String> restoreIpAddresses(String s) {
- List<String> res = new ArrayList<String>();
- for (int a = 1; a < 4; ++a)
- for (int b = 1; b < 4; ++b)
- for (int c = 1; c < 4; ++c)
- for (int d = 1; d < 4; ++d)
- if (a + b + c + d == s.length()) {
- int A = Integer.parseInt(s.substring(0, a));
- int B = Integer.parseInt(s.substring(a, a + b));
- int C = Integer.parseInt(s.substring(a + b, a + b + c));
- int D = Integer.parseInt(s.substring(a + b + c));
- if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
- String t = String.valueOf(A) + "." + String.valueOf(B) + "." + String.valueOf(C) + "." + String.valueOf(D);
- if (t.length() == s.length() + 3) res.add(t);
- }
- }
- return res;
- }
- }
【1】【leetcode-93】复原IP地址的更多相关文章
- Java实现 LeetCode 93 复原IP地址
93. 复原IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11. ...
- leetcode 93 复原IP地址
IP地址,分成四段,每段是0-255,按照每段的长度分别为1,2,3下一段长度分别1,2,3再下一段......进行递归遍历,能满足条件的假如res中.比较难想到的就是假如有一段是三位的010是不符合 ...
- LeetCode 93. 复原IP地址(Restore IP Addresses)
题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&qu ...
- LeetCode:复原IP地址【93】
LeetCode:复原IP地址[93] 题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: [&qu ...
- leetcode刷题-93复原IP地址
题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔. 示例: 输入: &q ...
- Leetcode 93.复制IP地址
复制IP地址 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135& ...
- 93复原IP地址。
from typing import List# 这道题不是很难,但是限制条件有很多.# 用递归的方法可以很容易的想到.只需要四层递归就好了.# 每次进行加上限制条件.过滤每一层就好了..class ...
- 93. 复原 IP 地址
做题思路or感想 这种字符串切割的问题都可以用回溯法来解决 递归三部曲: 递归参数 因为要切割字符串,所以要用一个startIndex来控制子串的开头位置,即是会切割出一个范围是[startIndex ...
- 93. 复原IP地址
题目描述: 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&q ...
- [LeetCode] Restore IP Addresses 复原IP地址
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
随机推荐
- 【XSY1538】连在一起的幻想乡 数学 无向连通图计数
题目大意 给你\(n,p\),求\(n\)个点组成的所有无向连通图的边数的平方和模\(p\) \(n\leq 2000,p\leq {10}^9\) 题解 设\(m=\frac{n(n-1 ...
- C# 成员默认访问权限(public、private、protected、internal)
C# 成员默认访问权限(public.private.protected.internal) 来源 https://www.cnblogs.com/yezongjie/p/20181121Access ...
- thinkphp5.0.7 &===composer更新===& thinkphp5.0.9 debug “controller not found”
当thinkphp5.0.7更新到最新版本时,问题来了... 控制类加载不了. 上线版本出现这个情况,也就悲哀了.====== 那么这种问题主要是因为 composer 没有合理的使用: 详细参考:如 ...
- 【 HDU3294 】Girls' research (Manacher)
BUPT2017 wintertraining(15) #5F HDU - 3294 题意 给定字母x,字符串变换一下: 'x'-1 -> 'z', 'x'->'a', 'x'+1-> ...
- 洛谷P3222 [HNOI2012]射箭(计算几何,半平面交,双端队列)
洛谷题目传送门 设抛物线方程为\(y=ax^2+bx(a<0,b>0)\),我们想要求出一组\(a,b\)使得它尽可能满足更多的要求.这个显然可以二分答案. 如何check当前的\(mid ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- HAOI2016 简要题解
「HAOI2016」食物链 题意 现在给你 \(n\) 个物种和 \(m\) 条能量流动关系,求其中的食物链条数. \(1 \leq n \leq 100000, 0 \leq m \leq 2000 ...
- awk文本分析工具
Usage:awk [option] 'program' file ... awk [option] -f progfile file ... [optin]: -F fs 指定输入分隔符,fs可是字 ...
- 20165223 Linux安装及命令入门
预备作业3:Linux安装及命令入门 一.VirtualBox和Ubuntu的安装 通过学习实践基于VirtualBox虚拟机安装Ubuntu图文教程,我开始学习虚拟机的安装,根据教程一步步试着安装. ...
- Redis高并发和快速的原因
一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...