字符串转换为合法IP地址
2015-12-27 14:39
429 查看
摘要: java 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)。
测试代码如下,
测试结果如下,
符合我们的预期目标。
问题描述
给一个由数字组成的字符串。求出其可能恢复为的所有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(){ }}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树