IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 剑指offer87:恢复IP地址 -> 正文阅读

[网络协议]剑指offer87:恢复IP地址

题目:
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的有效IP 地址 。你可以按任何顺序返回答案。
有效 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 地址。
1.输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]
2.输入:s = “0000”
输出:[“0.0.0.0”]
3.输入:s = “1111”
输出:[“1.1.1.1”]
4.输入:s = “010010”
输出:[“0.10.0.10”,“0.100.1.0”]

0 <= s.length <= 3000
s 仅由数字组成
分析:
IP地址特点是被3个‘.’字符分隔成4段,每段是0-255之间的数字。另外,除了“0”以外,其他数字不能以0开头。
下面逐个扫描输入字符串中的字符以恢复IP地址,针对字符串中的每个数字,通常有两个选项,第一个选项是将字符拼接到当前分段数字的末尾,并且保证拼接后的数字在0-255范围内。第二个选项是当前字符作为一个新的分段数字的开始。
如果输入的字符串的长度为n,由于逐一处理字符串的每个字符,因此需要n步,并且每一步都面临两个选项。
代码:

import java.util.LinkedList;
import java.util.List;

public class RestoreIpAddresses {
    public static void main(String[] args) {
        RestoreIpAddresses restoreIpAddresses = new RestoreIpAddresses();
        List<String> strings = restoreIpAddresses.restoreIpAddresses("10203040");
        System.out.println(strings);
    }
    public List<String> restoreIpAddresses(String s) {
        LinkedList<String> result = new LinkedList<>();
        helper(s,0,0,"","",result);
        return result;
    }

    private void helper(String s, int i, int segI, String seg, String ip, LinkedList<String> result) {
    //参数i是字符串s中当前被处理的字符下标,segI是当前分段数字的下标,因为ip地址有四个分段数字,因此参数segI的取值范围是从0到3,参数seg是当
    //前已经恢复的一个分段数字,而参数ip是当前已经恢复的ip地址。
        if (i == s.length() && segI ==3 && isValidSeg(seg)){
            result.add(ip+seg);
        }else if(i < s.length() && segI <= 3){
            char ch = s.charAt(i);
            //如果该分段符合条件
            if (isValidSeg(seg+ch)){
            //给单个分段增加数字字符
                helper(s,i+1,segI,seg+ch,ip,result);
            }
            //回溯类似存档点,从分段开始从后向前回溯
            if (seg.length() >0 &&segI<3){
            //如果分段的长度大于0,并且当前分段下标小于3,则在ip中增加该分段和.,分段数字下标加1,
                helper(s,i+1,segI+1,""+ch,ip+seg+".",result);
            }
        }

    }

    private boolean isValidSeg(String seg) {
    //如果满足分段的数字小于等于255并且该分段的首字母不等于0或者该分段只有0
        return Integer.valueOf(seg) <= 255&&(seg.equals("0")||seg.charAt(0)!='0');
    }
}

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:22:35  更:2022-01-14 02:23:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 5:57:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码