LeetCode:复原IP地址【93】

题目描述

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

示例:

  输入: "25525511135"
  输出: ["255.255.11.135", "255.255.111.35"]

题目分析

  ip地址由三个小数点(.)分割成四段,每一段取值为0~255。所以输入字符串s最长为12,最少为4位

  以2556....来划分的话,第一段有可能是下面三种情况:

  • 255,此段为3个
  • 25,此段为2个
  • 2,此段为1个

  所以采用递归框架,从某一位置开始,往后依次截取3、2、1,但是如果某一段截取到的情况是下面两种则不用继续深入:

  • >255,大于255此段不合适,说明此段不应该截取长度为3。
  • 0XX或0X,如果此段为0开头,是不合理,说明此段不应该截取长度为3或2,只能为1,即0作为单独一段。 

  即剪枝条件:不能以0开头,不能大于255.

Java题解

class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> result = new ArrayList<>();
if(s.length()>12||s.length()<4)
return result;
digui(result,s,0,0);
return result;
} public void digui(List<String> list,String tmp,int pos,int count){
//结束条件
if(count==3){
if(pos+3>tmp.length()-1&&isValid(tmp.substring(tmp.lastIndexOf(".")+1)))
list.add(tmp);
} //业务处理
if(pos+3<tmp.length()&&isValid(tmp.substring(pos,pos+3))){
String thirdTmp = tmp.substring(0,pos+3)+"."+tmp.substring(pos+3);
digui(list,thirdTmp,pos+4,count+1);
}
if(pos+2<tmp.length()&&isValid(tmp.substring(pos,pos+2))){
String secondTmp = tmp.substring(0,pos+2)+"."+tmp.substring(pos+2);
digui(list,secondTmp,pos+3,count+1);
}
if(pos+1<tmp.length()){
String firstTmp = tmp.substring(0,pos+1)+"."+tmp.substring(pos+1);
digui(list,firstTmp,pos+2,count+1);
} } public boolean isValid(String s){
int val = Integer.valueOf(s);
if(val>255)
return false;
     //用于处理0XX或0X的情况
if(!String.valueOf(val).equals(s))
return false;
return true;
}
}

思考

  暴力通常可以解决问题,但是肯定不是最高效的方法,这里对字符串的处理占用了太多内存和时间。有没有更好的办法呢?

  待续...

LeetCode:复原IP地址【93】的更多相关文章

  1. LeetCode 复原IP地址(探索字节跳动)

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

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

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

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

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

  4. LeetCode(93): 复原IP地址

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

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

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

  6. leetcode 93 复原IP地址

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

  7. 第93题:复原IP地址

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

  8. 93复原IP地址。

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

  9. 93. 复原 IP 地址

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

随机推荐

  1. P1505 [国家集训队]旅游[树剖]

    题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路 ...

  2. string长度问题

    原文地址: https://toutiao.io/shares/2029578/url String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于 ...

  3. 【游记】CSP2019 垫底记

    考试时候的我: Day 1 做完 \(T1\) 和 \(T2\),还有 \(2.5 h\),我想阿克 \(Day1\).(\(T3\):不,你不想) 不过一会就想出来给每个点 dfs 贪心选一个点,然 ...

  4. gin+redis

    var RedisDefaultPool *redis.Pool func newPool(addr string) *redis.Pool { return &redis.Pool{ Max ...

  5. WinDbg常用命令系列---.load, .loadby (Load Extension DLL)

    .load, .loadby (Load Extension DLL) 简介 .load和.loadby命令将新的扩展DLL加载到调试器中. 使用形式 .load DLLName !DLLName.l ...

  6. 微软安全技术Shim

    Shim是微软系统中一个小型函数库,用于透明地拦截API调用,修改传递的参数.自身处理操作.或把操作重定向到其他地方.Shim主要用于解决遗留应用程序在新版Windows系统上的兼容性问题,但Shim ...

  7. node安装失败报错

     安装Node有时会报错 提示这段信息 怎么安装都不行 最后通过命令行安装就可以完成 1.首先去Node下载安装包 下载完后放在本地 比如我放在桌面aa这个文件夹里 2.进去aa这个文件 复制里面的路 ...

  8. SQL必知必会收集学习

    1.按查询列位置排序:如按第一列 降序排序 desc

  9. 【JZOJ6228】【20190621】ni

    题目 $ n $ 个数 $ E_i $ ,$ F(i) $ 表示对1-i的数任意排列 $ p $ ,初始 $ X=0 $ ,依次执行: \(X \lt E_{p_j} \ , \ X++\) $X \ ...

  10. log4j 1.2 配置和使用简述

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/log4j_properties_simple_introduct ...