数据结构与算法:数字字符串转化成IP地址
原创
©著作权归作者所有:来自51CTO博客作者请叫我大虾的原创作品,请联系作者获取转载授权,否则将追究法律责任
描述
现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。
例如:
给出的字符串为"25525522135",
返回[“255.255.22.135”, “255.255.221.35”]. (顺序没有关系)
import java.util.ArrayList;
public class RestoreIpSolve {
/**
*
* @param s string字符串
* @return string字符串ArrayList
*/
public ArrayList<String> restoreIpAddresses (String s) {
ArrayList<String> res = new ArrayList<>();
int n = s.length();
// "10.0.1.3"
//"255.255.255.255"
// 每个节点不超过3个长度
for (int i = 1; i < 4 && i < n-2; i++) {
for (int j = i+1; j < 4+i && j < n-1; j++) {
for (int k = j+1; k < 4+j && k < n; k++) {
String a = s.substring(0,i);
String b = s.substring(i,j);
String c = s.substring(j,k);
String d = s.substring(k);
// 每个节点不能超过255
if(Integer.valueOf(a) > 255 || Integer.valueOf(b) > 255 || Integer.valueOf(c) > 255 || Integer.valueOf(d) > 255){
continue;
}
if((a.length() != 1 && a.charAt(0) == '0') || (b.length() != 1 && b.charAt(0) == '0') || (c.length() != 1 && c.charAt(0) == '0') || (d.length() != 1 && d.charAt(0) == '0')){
continue;
}
res.add(a+"."+b+"."+c+"."+d);
}
}
}
return res;
}
public static void main(String[] args) {
RestoreIpSolve restoreIpSolve = new RestoreIpSolve();
String str = "255255255255";
ArrayList<String> strLists = restoreIpSolve.restoreIpAddresses(str);
for (String s : strLists) {
System.out.println(s);
}
}
}