BM74-数字字符串转化成IP地址

news/2024/11/23 9:53:34/

题目

现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。

例如:

给出的字符串为"25525522135",

返回["255.255.22.135", "255.255.221.35"]. (顺序没有关系)

数据范围:

字符串长度 0≤n≤12

要求:

空间复杂度 O(n!),时间复杂度 O(n!)

注意:

ip地址是由四段数字组成的数字序列,格式如 "x.x.x.x",其中 x 的范围应当是 [0,255]。

示例1

输入:

"25525522135"

返回值:

["255.255.22.135","255.255.221.35"]

示例2

输入:

"1111"

返回值:

["1.1.1.1"]

示例3

输入:

"000256"

返回值:

[]


思路1:枚举

对于IP字符串,如果只有数字,则相当于需要将IP地址的三个点插入字符串中,而第一个点的位置只能在第一个字符、第二个字符、第三个字符之后,而第二个点只能在第一个点后1-3个位置之内,第三个点只能在第二个点后1-3个位置之内,且要要求第三个点后的数字数量不能超过3,因为IP地址每位最多3位数字。

具体做法:

  • step 1:依次枚举这三个点的位置。
  • step 2:然后截取出四段数字。
  • step 3:比较截取出来的数字,不能大于255,且除了0以外不能有前导0,然后才能组装成IP地址加入答案中。

代码1

import java.util.*;public class Solution {public ArrayList<String> restoreIpAddresses (String s) {ArrayList<String> res = new ArrayList<String>();int n = s.length();//遍历IP的点可能的位置(第一个点)for (int i = 1; i < 4 && i < n - 2; i++) {//第二个点的位置for (int j = i + 1; j < i + 4 && j < n - 1; j++) {//第三个点的位置for (int k = j + 1; k < j + 4 && k < n; k++) {//最后一段剩余数字不能超过3if (n - k >= 4) {continue;}//从点的位置分段截取String a = s.substring(0, i);String b = s.substring(i, j);String c = s.substring(j, k);String d = s.substring(k);//IP每个数字不大于255if (Integer.parseInt(a) > 255 || Integer.parseInt(b) > 255 ||Integer.parseInt(c) > 255 || Integer.parseInt(d) > 255) {continue;}//排除前导0的情况if ((a.length() != 1 && a.charAt(0) == '0') || (b.length() != 1 &&b.charAt(0) == '0') ||  (c.length() != 1 && c.charAt(0) == '0') ||(d.length() != 1 && d.charAt(0) == '0')) {continue;}//组装IP地址String temp = a + "." + b + "." + c + "." + d;res.add(temp);}}}return res;}
}

思路2:递归+回溯

对于IP地址每次取出一个数字和一个点后,对于剩余的部分可以看成是一个子问题,因此可以使用递归和回溯将点插入数字中。

具体做法:

  • step 1:使用step记录分割出的数字个数,index记录递归的下标,结束递归是指step已经为4,且下标到达字符串末尾。
  • step 2:在主体递归中,每次加入一个字符当数字,最多可以加入三个数字,剩余字符串进入递归构造下一个数字。
  • step 3:然后要检查每次的数字是否合法(不超过255且没有前导0)
  • step 4:合法IP需要将其连接,同时递归完这一轮后需要回溯。

代码2

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** @param s string字符串* @return string字符串ArrayList*/public ArrayList<String> restoreIpAddresses (String s) {// 对于IP地址每次取出一个数字和一个点后,对于剩余的部分可以看成是一个子问题,因此可以使用递归和回溯将点插入数字中。ArrayList<String> res = new ArrayList<>();dfs(s, res, 0, 0);return res;}//记录IP被分段形成的数字字符串private String nums = "";public void dfs(String s, ArrayList<String> res, int step, int index) { //step表示第几个数字,index表示字符串下标//当前分割出的字符串String cur = "";//分割出了4个数字if (step == 4) {//下标必须走到尾部if (index != s.length()) {return;} else {res.add(nums);}} else {//最长遍历3位for (int i = index; i < index + 3 && i < s.length(); i++) {cur += s.charAt(i);//转数字进行比较int num = Integer.parseInt(cur);String temp = nums;//不能超过255且不能有前导0if (num <= 255 && (cur.length() == 1 || cur.charAt(0) != '0')) {//添加点if (step - 3 != 0) {nums += cur + ".";} else {nums += cur;}//递归查找下一个数字dfs(s, res, step + 1, i + 1);//回溯nums = temp;}}}}
}


http://www.ppmy.cn/news/785360.html

相关文章

【全栈第三课】通过ChatGPT快速入门NodeJS

前言 往期全栈课程&#xff1a; Vue从入门到精通 微信小程序从入门到精通 Node.js基础 简介 Node.js是什么&#xff1f; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O的模型&#xff0c;使其轻量又高效。Node.js …

京东联盟高级API - 京东联盟商品类目查询接口

根据商品的父类目id查询子类目id信息&#xff0c;通常用获取各级类目对应关系&#xff0c;以便将推广商品归类。业务参数parentId、grade都输入0可查询所有一级类目ID&#xff0c;之后再用其作为parentId查询其子类目。 1、注册共京荣开放平台账号 http://interface.mkstone.…

京东联盟API接口

今天接入京东联盟api接口&#xff1a;京粉精选商品查询接口 / jd.union.open.goods.jingfen.query 代码如下&#xff1a;控制台打印如下&#xff1a; 目前还没找到原因&#xff0c;求好心人可怜可怜我

京东联盟api集成的坑

1、使用 api接口 jd.union.open.promotion.common.get 获取推广链接的时候&#xff0c;一直返回 400错误&#xff0c;输入参数错误。可是看自己传的参数跟API调试工具 https://union.jd.com/openplatform/debug/10421 的一样啊&#xff0c;不停baidu资料&#xff0c;查看 京东…

京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口,线报无广告接口

京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口&#xff0c;线报无广告接口 ##共京荣开放平台 接口支持商品链接&#xff0c;活动链接&#xff0c;店铺链接转链&#xff0c;获取普通推广链接和优惠券二合一推广链接&a…

小白篇之京东直播如何用专业设备开始直播(手机端、PC端)

京东直播如何开始直播(手机端、PC端) 复制一下上面的推流地址&#xff0c;等待备用。 OBS直播推流方式&#xff1a; ENC1编码器设备配置推流方式 ENC1是采用华为海思芯片&#xff0c;硬件编解码&#xff0c;对比OBS来说它可以减少电脑CPU的占用&#xff0c;而且速度肯…

移动端京东首页

移动端京东首页 目录结构页面骨架技术点源码效果图 目录结构 js index.js css base.css reset.csscommon.css index.css images index.html 页面骨架 技术点 语义化标签移动端屏幕适配(视口设置)移动端二倍图问题流式布局(百分比布局)响应式顶部搜索栏(双飞翼)利用伪元素清除…

基于vue仿京东第三方购物车PC端

基于vue仿京东第三方购物车PC端 仿京东PC端&#xff0c;全选反选&#xff0c;选择店铺&#xff0c;选择商品&#xff0c;计算总价 HTML <div class"tree1"><div class"tree"><div class"tree-title"><input type"ch…