文档章节

字符串转换为合法IP地址

SVD
 SVD
发布于 2015/12/27 14:24
字数 493
阅读 688
收藏 2

问题描述

给一个由数字组成的字符串。求出其可能恢复为的所有IP地址。

那么首先我们需要了解ip地址的及其格式。

IP地址及其格式

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

解决方案

我们如果使用java解决这个问题,可以这样,

import java.util.ArrayList;
public class Solution {
    
    /**
     * @param s the IP string
     * @return All possible valid IP addresses
     */
    public static boolean isValid(String s){
        if (s.charAt(0)=='0') return s.equals("0");
        int num = Integer.parseInt(s);
        return num<=255 && num>0;
    }
    public static ArrayList<String> restoreIpAddresses(String s) {
        // Write your code here
        ArrayList<String> res = new ArrayList<String>();
        if (s.length()<4||s.length()>12) return res;
        dfs(s,"",res,0);
        return res;
    }
    public static void dfs(String s, String tmp, ArrayList<String> res, int count){
        if (count == 3 && isValid(s)) {
            res.add(tmp + s);
            return;
        }
        for(int i=1; i<4 && i<s.length(); i++){
            String substr = s.substring(0,i);
            if (isValid(substr)){
                dfs(s.substring(i), tmp + substr + '.', res, count+1);
            }
        }
    }
    
}

测试代码如下,

public class Test {
	public static void main(String [] args)
	{		
		System.out.println(Solution.restoreIpAddresses("25525511135"));
	}
}

测试结果如下,

[255.255.11.135, 255.255.111.35]

符合我们的预期目标。

语法细节

其中代码中的语法细节之一是static method 的调用。当我们在一个类中调用另外一个类的方法时,需要注意有两种可能,

class A{
  public void methodA(){
    new B().methodB();
    //or
    B.methodB1();
  }}class B{
  //instance method
  public void methodB(){
  }
  //static method
  public static  void methodB1(){
  }}

© 著作权归作者所有

共有 人打赏支持
SVD

SVD

粉丝 34
博文 208
码字总数 102940
作品 0
海淀
私信 提问
加载中

评论(2)

SVD
SVD
深度优先搜索
SVD
SVD
"1921685133"---------------------------->[19.216.85.133, 192.16.85.133, 192.168.5.133, 192.168.51.33]
NAT——网络内部计算机的保护伞

NAT(网络地址转换)通过将内部网络的私网IP地址翻译成全球唯一的公网IP地址。使内部网络可以连接到互联网等外部网络上,广泛应用于各种类型的互联网接入方式和各种类型的网络中。 NAT在实际应...

cchenyz
2018/05/19
0
0
Netscaler立身之本——NAT

一、前言 ADC的主要作用是作为服务器的反向代理来进行应用发布的,介于客户端和服务器端之间,那么NAT就是它必然要面临的工作。归根结底,NAT就是ADC的数据转发立身之本。能否支持更多、更灵...

caojin_gene
2017/05/17
0
0
JavaScript 表单验证—正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。[正则表达式]...

夜寒曦
2018/06/08
0
0
IP地址转换函数——inet_pton inet_ntop inet_aton inet_addr inet_ntoa

inetpton NAME inet_pton - 将 IPv4 和 IPv6 地址从点分十进制转换为二进制 SYNOPSIS

zxzhang
2018/07/29
0
0
路由器“NAT模式”与“路由模式”的区别

NAT模式:“网络地址转换”,允许一个整体机构以一个公用IP地址出现在Internet上。顾名思义,它是一种把内部私有网络地址(IP地址)NAT转发成合法公有网络IP地址的技术。 路由模式:所有数据...

任远
2018/03/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate SQLite方言

以下代码有参考过github上国外某位大佬的,在发文的最新稳定版Hibernate上是可用的,有时间再仔细分析一下 import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.S...

CHONGCHEN
今天
3
0
CentOS 7 MariaDB搭建主从服务器

本文编写环境为CentOS7。确保关闭SELinux,关闭防火墙或者防打开指定端口。具体信息如下 #master[root@promote ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [r...

白豆腐徐长卿
今天
10
0
介绍python中运算符优先级

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部...

问题终结者
今天
3
0
Spring Boot 2.x基础教程:快速入门

简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让...

程序猿DD
昨天
9
0
SpringSecurity认证流程源码级详解

SpringSecurity认证流程源码级详解 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息

chendom
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部