Lq93:复原 IP 地址

news2024/11/20 1:42:31

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。

  • 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245""192.168.1.312" 和 "192.168@1.1" 是 无效 IP 地址。

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 '.' 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。

 思路:

  • 以 "25525511135" 为例,第一步时我们有几种选择?
    1. 选 "2" 作为第一个片段
    2. 选 "25" 作为第一个片段
    3. 选 "255" 作为第一个片段
  • 能切三种不同的长度,切第二个片段时,又面临三种选择。
  • 这会向下分支,形成一棵树,我们用 DFS 去遍历所有选择,必要时提前回溯。
    因为某一步的选择可能是错的,得不到正确的结果,不要往下做了。撤销最后一个选择,回到选择前的状态,去试另一个选择。

回溯的要点:约束 

约束条件限制了当前的选项,题中ip的格式就是约束条件:

  1. 一个片段的长度是1-3
  2. 片段的值的范围是0-255
  3. 不能是0X、0XX这种形式

用这些约束来进行充分的剪枝,去掉一些选择,避免搜索一不会产生正确答案的分支。 

回溯的目标 

  • 目标决定了什么时候捕获答案,什么时候砍掉死支,回溯。
  • 目标是生成 4 个有效片段,并且要耗尽 IP 的字符。
  • 当条件满足时,说明生成了一个有效组合,加入解集,结束当前递归,继续探索别的分支。
  • 如果满4个有效片段,但没耗尽字符,不是想要的解,不继续往下递归,提前回溯。

定义dfs函数

  • dfs 函数传什么?也就是,用什么描述一个节点的状态?
  • 选择切出一个片段后,继续递归剩余子串。可以传子串,也可以传指针,加上当前的片段数组,描述节点的状态。
  • dfs 函数做的事:复原从 start 到末尾的子串。
/**
 * IP全排列组合问题
 */
class IPSolution
{
    List<String> res;
    List<String> temp;//temp用于将原字符串截取分成四段
    public List<String> restoreIpAddresses(String s)
    {
        int n = s.length();
        res = new ArrayList<>();
        temp = new ArrayList<>();
        if(n<=3 || n>=13)
        {
            return res;
        }
        dfs(s,0);
        return res;

    }
    public void dfs(String s,int begin)
    {
        if(begin==s.length() && temp.size()==4)
        {
            String str=temp.get(0);
            for(int i=1;i<4;i++)
            {
                str=str+'.'+temp.get(i);
            }
            res.add(str);
            return;
        }
        if(begin<s.length() && temp.size()==4)
        {
            return;
        }

        for(int len=1;len<=3;len++)
        {
            //保证后续s.substring(begin,begin+len)合法
            if(begin+len-1>=s.length())
            {
                return;
            }
            //剔除不合法的前导0
            if(len!=1 && s.charAt(begin)=='0')
            {
                return;
            }
            //截取字符串
            String st = s.substring(begin,begin+len);
            //截取的字符串长度为3时,大小不能超过255
            if(len==3 && Integer.parseInt(st)>255)
            {
                return;
            }
            temp.add(st);
            dfs(s,begin+len);
            temp.remove(temp.size()-1);
        }

    }

    public static void main(String[] args) {
        String s = "25525511135";
        IPSolution ipSolution = new IPSolution();
        System.out.println(ipSolution.restoreIpAddresses(s));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础:Map集合

1. Map集合概述 现实生活中&#xff0c;我们常会看到这样的一种集合&#xff1a;IP地址与主机名&#xff0c;身份证号与个人&#xff0c;系统用户名与系统用户对象等&#xff0c;这种一一对应的关系&#xff0c;就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象…

IOC 容器

IOC 概念和原理 1. 什么是 IOC&#xff1f; 控制饭庄&#xff08; Inversion of Control &#xff0c;缩写为 IOC&#xff09;&#xff0c;是面向对象编程中的一种设计原则&#xff0c;可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入&#xff08; Depende…

基于SSM的网红书购物商城(源码+论文+开题报告+答辩PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

java实现简单窗口小游戏“扫雷”

前言 忘记是从何处看到过关于扫雷小程序的文章&#xff0c;所以这次也就跟着做一下。其实很简单的&#xff0c;如果有java入门的同学也可以尝试一下自己做这种java小程序。几行代码做几遍基本上能摸清楚这些基础了&#xff0c;对于编程能力也能提高一些。&#xff08;虽然小编…

appium笔记——01环境搭建

0、关系图 1.appium客户端&#xff1a; python程序&#xff0c;链接appium服务器&#xff0c;并发送请求 2.appium服务端(模拟器客户端)&#xff1a; appium程序&#xff0c;需要提前启动&#xff0c;不仅充当appium服务端&#xff0c;还充当模拟器客户端&#xff08;接收h…

基于Apriori算法的购物网站商品推荐系统

基于Apriori算法的购物网站商品推荐系统 目 录 一、 算法内容 3 Step 1 收集用户偏好 3 Step 2 对数据进行预处理 3 Step 3 计算相似度 4 Step 4 找邻居 5 Step 5 计算推荐 6 二、 预期结果 6 三、 对比和讨论 7 Step 5 计算推荐 Section A 基于用户的协同过滤(User CF) 通过前…

Python中12个常用模块的使用教程

1. time模块 import time *一*#时间戳--》结构化时间--》格式化的字符串时间 ----------------------------------------------------------------------------- res1time.localtime(654126574) print(res1 ) #res1time.struct_time(tm_year1990, tm_mon9, tm_mday24, tm_hour…

数学大世界杂志数学大世界杂志社数学大世界编辑部2022年第7期目录

名家论坛《数学大世界》投稿&#xff1a;cn7kantougao163.com 新时期高中数学课堂教学有效性的提升策略 姜徳余; 3-5 化“零”为整&#xff0c;以“构”促学——小学数学结构化教学策略探析 孟龙平; 6-8 做反思型教师&#xff0c;加强数学衔接模块教学 陈小菊; 9-1…

[附源码]Python计算机毕业设计SSM基于远程协作的汽车故障诊断系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SELinux

文章目录SELinux说明SELinux 的运行模式SElinux命令SELinux 是 Security-Enhanced Linux 缩写&#xff0c;安全强化的linux 系统资源都是通过程序进行访问的&#xff0c;如果将/var/www/html权限设置为777&#xff0c;代表所有程序均可以对该目录访问&#xff0c;如果已启动www…

面试官狂问八股文?我已经被三家公司问到哑口无言……

秋招刚过去&#xff0c;整体的感受是&#xff1a;面试难度和拿 offer 的难度比往年难多了&#xff0c;而且互联网还有较大的裁员风险&#xff0c;网上各种消息不断&#xff0c;有时候真是焦虑到不行。 大家还是要早做准备&#xff0c;多面试积累经验&#xff0c;有些人总想准备…

WebDAV之葫芦儿·派盘+可乐记

可乐记 支持WebDAV方式连接葫芦儿派盘。 推荐一款小巧好用的便签类记事本软件,它能够帮助用户在手机上快捷的记录一些代办事项或者是当做一个日记本来记录心情,小容量设备的福音,它就是可乐记。 可乐记这款软件的界面非常的简单,用户在首页就能看到最近所创建的标签,用…

服务器远程端口怎么修改

服务器远程端口怎么修改 修改Windows系统实例默认远程端口 以Windows Server 2012为例介绍如何修改Windows系统实例默认远程端口。 远程连接进入服务器后修改注册表子项PortNumber的值。 按快捷键 Win&#xff08;Windows 徽标键&#xff09;R&#xff0c;启动运行窗口。输…

机器学习-模型评估与选择(待更新)

本章主要讲解机器学习的基础知识&#xff0c;有关一些专业术语的定义与解释。 文章目录2.1 经验误差与过拟合2.2 评估方法2.2.1 留出法2.2.2 交叉验证法2.2.3 自助法2.2.4 调参与最终模型2.3 性能度量2.3.1 错误率与精度2.3.2 查准率、查全率与F12.3.3 ROC与AUC2.1 经验误差与过…

诊断2F和14,19服务概述

关于2F 关于抑制位 关于14服务 关于19服务 在0x19服务中一般的使用顺序 1\0x19服务01子服务 通过状态掩码去查找与其相匹配的故障个数。 通过该服务诊断仪能够请求ECU中DTC状态与DTC状态掩码相匹配的故障码个数。如果某一个故障码的实际状态位为“1”&#xff0c;并且DTC状…

医院设置模块查询和删除功能的设计与实现

一、医院设置模块需求 医院设置主要是用来保存开通医院的一些基本信息&#xff0c;每个医院一条信息&#xff0c;保存了医院编号&#xff08;平台分配&#xff0c;全局唯一&#xff09;和接口调用相关的签名key等信息&#xff0c;是整个流程的第一步&#xff0c;只有开通了医院…

UGUI性能优化学习笔记(三)图片和图集

一、图片 1.1 纹理压缩 虽然我们可以将JPG、PNG之类的格式导入Unity作为纹理的源文件&#xff0c;但实际上&#xff0c;在导入Unity后&#xff0c;会自动对其进行纹理压缩。 为什么要进行纹理压缩&#xff1f; 每像素位数 (bpp) 表示单个纹理像素所需的存储量。bpp 值越低的…

简述供应链系统商品全生命周期管理价值,助力家用电器行业实现商品管理数字化

如今&#xff0c;随着数字化浪潮和消费升级叠加背景下&#xff0c;越来越多企业开始加速推进数字化的改造与升级&#xff0c;而家用电器行业作为我国经济发展不可或缺的中坚力量&#xff0c;现阶段许多家电企业的数字化管理水平还停留在初级阶段&#xff0c;难以适应变化多样的…

从弹性计算到数据处理——亚马逊云科技re:Invent

在2022亚马逊云科技re:Invent大会上&#xff0c;亚马逊云科技首席执行官Adam Selipsky说&#xff1a;“在今后的五年&#xff0c;我们创建了这些数据&#xff0c;可能会完全超过了数码时代一直到现在以来所有数据累加在一起的数量&#xff0c;这样同时也会告诉我们所有的组织都…

有哪些舆情监控方法,舆情监控工作机制?

一、舆情监控方法 1&#xff0c;组建新闻报道社会舆论舆情监控队伍 在言论高度自由的网络时代&#xff0c;人人都是自媒体&#xff0c;人人皆可表达意见。透过成立一队人才队伍的新闻报道社会舆论舆情监控各队能协助民营企业及时发现高度关注网络实时&#xff0c;迅速开展正面…