回溯---IP 地址划分

IP 地址划分

93. Restore IP Addresses(Medium)

Given "25525511135",
return ["255.255.11.135", "255.255.111.35"].

题目描述:

??根据所给的字符串,返回所有划分的合法IP地址。

思路分析:

??这道题其实就是一个深度优先遍历的过程。ip有4个段,每个段的字符个数可能是1,2,3,因此对每一段循环取1,2,3,然后标记当前对应的是ip段的哪个段,直到ip段已经分为4个段,并且取完了string这个时候取到一个合法的ip放入最后的结果中。对每次处理的时候如果按照每次取i个字符处理之后,调用递归取后面的段时,需要将前面取的i个字符去掉,因为如果这里取的满足条件那么后面一定已经存放到结果中。现在需要新起一个开头处理。

代码:

public List<String>restoreIpAddresses(String s){
    List<String>res=new ArrayList<>();
    if(s==null||s.length()==0)
        return res;
    StringBuilder str=new StringBuilder();
    findIp(0,s,str,res);
    return res;
}
public void findIp(int k,String s,StringBuilder str,List<String>res){
    if(k==4||s.length()==0){
        if(k==4&&s.length()==0)//分成了四段并且str没有剩余
            res.add(str.toString());
        return ;
    }
    for(int i=0;i<s.length()&&i<=2;i++){
        if(i!=0&&s.charAt(0)=='0')
            break;    //该段的长度不为1,但是字符串首字母为0,那么不符合ip命名方式,直接退出,例如:01.100.22.33其地址应该为1.100.22.33
        String part=s.substring(0,i+1);
        if(Integer.valueOf(part)<=255){
            if(str.length()!=0){//不是首段,则要加上段分隔符
                part='.'+part;
            }
            str.append(part); //添加
            findIp(k+1,s.substring(i+1),str,res); //k表示第几段
            str.delete(str.length()-part.length(),str.length()); //删除
        }
    }
}

原文地址:https://www.cnblogs.com/yjxyy/p/11111023.html

时间: 2024-11-07 00:58:51

回溯---IP 地址划分的相关文章

IP地址划分类型和子网划分

在实际的网络环境中,根据网络的规模不同,网络中主机的数目不同,把IP地址分为A,B,C 3类用于不同规模的网络中,而IP地址是32位的点分十进制表示,只有IP地址无法确定其属于哪一个网络,在IP地址的32位中,用前n位来标识网络,后32-n位标识网络中的主机,一般情况下是用前8,16或者24位来标识网络地址的,给定一个ip地址,则其网络地址为ip地址与1...10...0(n个1,32-n个0)作与运算的结果.1...10...0(n个1,32-n个0)称为这个网络的子网掩码(netmask).

应用层协议及ip地址划分

1.应用层协议 2.ip地址 3.子网划分及超网合并

IP地址划分

IP地址分为五类:A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同. A.B.C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是0,B类地址的前两位总是10,C类地址的前三位总是110. A类地址: (1)A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. (2)A类地址范围:1.0.0.1---126.255.255.254 (3)A类地址中的私有地址和保留地址:

[svc]ip地址划分

网络界有2个计算题,一个是子网掩码,另一个就是三次握手,四次回收序列号计算了. 学会如何划分等长子网 学会如何合并网段 学会ip是否能分配 理解特殊的ip地址 ip头部 ip地址分类 现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0.地址格式为: IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址 ip地址分类 A: 1-127 B: 128-191 C: 192-223 网络类别 IP地址范围 私有ip范围 A 0.0.0.0-127.255.255

第5章 IP地址和子网划分(1)_IP格式和子网掩码

1. 二进制和十进制 (1)二进制与十进制的对应关系 ①128为数轴的中点,最高位为1.其后的数,二进制最高位均为1.其前面的数二进制最高位均为0. ②192为128-255中间的数,最高两位为1.224为192-255中间的数,二进制最高3位为1.240为4个1,248为5个1,以此类推. ③64为0-128中间的数,二进制数为128最高位的右移一位,32为128二进制数最高位的1右移两位,以此类推. (2)判断十进制数的二进制形式后n位的方法(合并网段经常用的技巧) ①该数除为2n ②将余数

IP地址及子网划分

IP地址及子网划分 IP地址由网络号和主机号组成 Internet组织机构定义了五种IP地址,有A.B.C三类地址. 特殊的IP地址 1.         网络地址.网络地址用于表示网络本身.具有正常的网络号部分,而主机部分为全0.比如129.5.0.0就是B一个B类的网络地址. 2.         广播地址.广播地址用于向网络中的所有设备进行广播.具有正常的网络号部分,而主机号部分为全1.如,129.5.255.255就是一个B类的广播地址. 3.         255.255.255.2

IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的?

IP地址的分类及范围详解:A.B.C.D.E五类是如何划分的? 最近在考证,有一项内容是网络IP地址划分的题目,一直从事IT的猛然发现回答这个问题时产生了怀疑,于是习惯百度了一下,发现网上广泛流传的有关IP地址划分的文章居然是有点错误,误导人,现重新整理补充一下. 大家都知道现在的互联网使用的是32位地址,IPv6虽然也说了好些年,但大家都习惯接受IPv4的用法说法.IP以点分十进制表示,如172.16.0.0.地址格式为:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址

IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式

IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个bit.标识包括选项在内的IP头部字段的长度. 3.服务类型:8个bit.服务类型字段被划分成两个子字段:3bit的优先级字段和4bit TOS字段,最后一位置为0. 4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小花费.4bit中只能将其中一个bit位置1.如果4个bit均为0,则

ip地址及子网掩码换算,子网划分教程

在大型公司里,一般都会用到子网划分,来解决网络风暴的产生.也有通过子网划分来解决组播和广播的优化网络的. IP地址划分,以C网为例介绍,子网掩码划分.下面我们随便找个一个网段并赋上相应的子网位数. 如 192.168.1.53/27 需要计算 具体的子网掩码 子网数 可用的主机数 最大可容纳主机数 网络地址 广播地址 现在我们来了解一下C网的各项参数,如下图. 继续以 192.168.1.53/27 为例讲解 我们需要了解正常C网的网络号及位数是多少? 平时大家用的是192.168.0.*或19