千家信息网

java怎么还原IP地址

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要讲解了"java怎么还原IP地址",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么还原IP地址"吧!Example 1:Input
千家信息网最后更新 2025年12月03日java怎么还原IP地址

这篇文章主要讲解了"java怎么还原IP地址",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"java怎么还原IP地址"吧!

Example 1:

Input: s = "25525511135"Output: ["255.255.11.135","255.255.111.35"]

Example 2:

Input: s = "0000"Output: ["0.0.0.0"]

Example 3:

Input: s = "1111"Output: ["1.1.1.1"]

Example 4:

Input: s = "010010"Output: ["0.10.0.10","0.100.1.0"]

Example 5:

Input: s = "101023"Output: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

Constraints:

  • 0 <= s.length <= 3000

  • s consists of digits only.

解题思路

首先既然要验证的是一个IP地址,那就意味着这个给定的字符串一定不能超过12个字符,因为如果超过12个字符就不可能是IP地址。在此基础上,这个给定的字符串最多只有12个字符,要让一个字符串对应的可能的IP地址,就要穷举出所有的情况,然后逐个验证。穷举的方式相当于往字符之间的(顶多)11个空位中添加3个点,一共有C^3_11种加点的方式。例如,25525511135的所有可能情况如下所示,只要剔除不可能的情况即可:

2.5.5.255111352.5.52.55111352.5.525.5111352.5.5255.111352.5.52551.11352.5.525511.1352.5.5255111.352.5.52551113.52.55.2.55111352.55.25.5111352.55.255.111352.55.2551.11352.55.25511.1352.55.255111.352.55.2551113.52.552.5.5111352.552.55.111352.552.551.11352.552.5511.1352.552.55111.352.552.551113.52.5525.5.111352.5525.51.11352.5525.511.1352.5525.5111.352.5525.51113.52.55255.1.11352.55255.11.1352.55255.111.352.55255.1113.52.552551.1.1352.552551.11.352.552551.113.52.5525511.1.352.5525511.13.52.55255111.3.525.5.2.551113525.5.25.51113525.5.255.1113525.5.2551.113525.5.25511.13525.5.255111.3525.5.2551113.525.52.5.51113525.52.55.1113525.52.551.113525.52.5511.13525.52.55111.3525.52.551113.525.525.5.1113525.525.51.113525.525.511.13525.525.5111.3525.525.51113.525.5255.1.113525.5255.11.13525.5255.111.3525.5255.1113.525.52551.1.13525.52551.11.3525.52551.113.525.525511.1.3525.525511.13.525.5255111.3.5255.2.5.511135255.2.55.11135255.2.551.1135255.2.5511.135255.2.55111.35255.2.551113.5255.25.5.11135255.25.51.1135255.25.511.135255.25.5111.35255.25.51113.5255.255.1.1135255.255.11.135255.255.111.35255.255.1113.5255.2551.1.135255.2551.11.35255.2551.113.5255.25511.1.35255.25511.13.5255.255111.3.52552.5.5.111352552.5.51.11352552.5.511.1352552.5.5111.352552.5.51113.52552.55.1.11352552.55.11.1352552.55.111.352552.55.1113.52552.551.1.1352552.551.11.352552.551.113.52552.5511.1.352552.5511.13.52552.55111.3.525525.5.1.113525525.5.11.13525525.5.111.3525525.5.1113.525525.51.1.13525525.51.11.3525525.51.113.525525.511.1.3525525.511.13.525525.5111.3.5255255.1.1.135255255.1.11.35255255.1.113.5255255.11.1.35255255.11.13.5255255.111.3.52552551.1.1.352552551.1.13.52552551.11.3.525525511.1.3.5

针对每种情况c,将它分割为4个部分,比如2.5.5.25511135被分割为2、5、5、25511135,接下来对每个部分做判断。设其中一个部分的字符串为x,则只需要判断它是否满足以下两个条件,如果不满足则c这种情况就不是合法IP地址(在这个例子中是2.5.5.25511135):

1)x不能大于255;

2)x如果不等于0的话,它的第一个字符不能为0,比如02这种就是不满足的。

只有4个部分(2、5、5、25511135)都满足了上述两个条件,才算是合法的IP地址。对于上面的例子而言,所有情况里面就只有以下两个才是合法的IP地址:

255.255.11.135255.255.111.35

时间复杂度

无论初始给定的字符串长度是多少,一共最多只有C^3_11=165种加点的方式,所以时间复杂度为O(165)=O(1)

最终实现

Java实现
class Solution {        public List restoreIpAddresses(String s) {        if (s.length() > 12) {            return new ArrayList<>();        }        List candidates = new ArrayList<>();        // Step 1. Select all probable slots        List positions = new ArrayList<>();        for (int i = 1; i < s.length(); i++) {            for (int j = i + 1; j < s.length(); j++) {                for (int k = j + 1; k < s.length(); k++) {                    Position pos = new Position(i, j, k);                    positions.add(pos);                }            }        }        // Step 2. Add dot to the given string        for (Position pos : positions) {            StringBuffer buffer = new StringBuffer(s);            buffer.insert(pos.getZ(), ".");            buffer.insert(pos.getY(), ".");            buffer.insert(pos.getX(), ".");            String candidate = buffer.toString();            if (isValidIpAddress(candidate)) {                candidates.add(candidate);            }        }        return candidates;    }        private boolean isValidIpAddress(String ipAddress) {        String[] blocks = ipAddress.split("\\.");        for (String block : blocks) {            if (Integer.valueOf(block) > 255) {                return false;            }            if (block.startsWith("0") && block.length() != 1) {                return false;            }        }        return true;    }    static class Position {        private int x;        private int y;        private int z;        public Position(int x, int y, int z) {            this.x = x;            this.y = y;            this.z = z;        }        public int getX() {            return x;        }        public void setX(int x) {            this.x = x;        }        public int getY() {            return y;        }        public void setY(int y) {            this.y = y;        }        public int getZ() {            return z;        }        public void setZ(int z) {            this.z = z;        }    }}

感谢各位的阅读,以上就是"java怎么还原IP地址"的内容了,经过本文的学习后,相信大家对java怎么还原IP地址这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

地址 字符 情况 字符串 只有 合法 两个 方式 学习 验证 复杂 个部 例子 内容 复杂度 就是 思路 时间 条件 部分 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全论文5000字配图 武汉服务器机柜价格 华为网络技术课件 苏州应用软件开发价格表模板 网络安全手抄报小知识内容 网络安全作文的ppt课件 北京通信软件开发过程检测中心 玖玖软件开发有限公司招聘 西安电子科大网络安全 互联网网络安全工程费用 小学生网络安全知识宣讲会 外墙砖贴图软件开发 哪些电脑服务器主机服务可以关掉 php数据库判断语句 医疗软件开发公司 上海 郑州最好网络安全公司有哪些 计算机网络技术专升本难度 svn的数据库不小心删除了 腾讯云服务器香港不稳定 河南志远网络技术有限公司 四川大学计算机和网络安全 公众网络安全吗 云南平讯科技互联网设计 如何自己学习网络安全知识 华为hcna网络技术讲解 国家网络安全周法治日 湖北2017网络安全答题 南昌互联网科技有限公司法人 go 连接postgre数据库 做软件开发上什么专业
0