题目描述
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given"25525511135",
return["255.255.11.135", "255.255.111.35"]. (Order does not matter)
s虽然题目说是不用考虑顺序,但是它的测试用例其实是按顺序排列的,所以用了一个Comparator去排序:
import java.util.*;
public class Solution {
public ArrayList<String> restoreIpAddresses(String s) {
ArrayList<String> res = new ArrayList<String>();
ArrayList<String> resa = new ArrayList<String>();
ArrayList<String> resb = new ArrayList<String>();
if(s.length()>12)return res;
for (int i = 2; i < s.length()-1; i++) {
boolean vailda = false;
boolean vaildb = false;
String a = s.substring(0,i);
String b = s.substring(i,s.length());
for (int j = 1; j < a.length(); j++) {
String A = a.substring(0, j);
String B = a.substring(j, a.length());
String inta = String.valueOf(Integer.parseInt(A));
String intb = String.valueOf(Integer.parseInt(B));
if(inta.length()==A.length()&&intb.length()==B.length()) {
if(Integer.parseInt(A)<=255&&Integer.parseInt(B)<=255) {
String n = A+'.'+B+'.';
resa.add(n);
vailda = true;
}
}
}
for (int j = 1; j < b.length(); j++) {
String A = b.substring(0, j);
String B = b.substring(j, b.length());
String inta = String.valueOf(Integer.parseInt(A));
String intb = String.valueOf(Integer.parseInt(B));
if(inta.length()==A.length()&&intb.length()==B.length()) {
if(Integer.parseInt(A)<=255&&Integer.parseInt(B)<=255) {
String n = A+'.'+B;
resb.add(n);
vaildb = true;
}
}
}
if(vailda&&vaildb) {
for (String c : resa) {
for (String v : resb) {
if(!res.contains(c+v))
res.add(c+v);
}
}
}
resa.clear();
resb.clear();
}
//对res进行排序
Collections.sort(res,new Comparator<String>() {
//当该方法返回正数时,以第一个参数大于第二个,反之亦然
@Override
public int compare(String o1, String o2) {
String[] split1 = o1.split("\\.");
String[] split2 = o2.split("\\.");
if(Integer.parseInt(split1[0])!=Integer.parseInt(split2[0]))return Integer.parseInt(split1[0])-Integer.parseInt(split2[0]);
else if(Integer.parseInt(split1[1])!=Integer.parseInt(split2[1]))return Integer.parseInt(split1[1])-Integer.parseInt(split2[1]);
else if(Integer.parseInt(split1[2])!=Integer.parseInt(split2[2]))return Integer.parseInt(split1[2])-Integer.parseInt(split2[2]);
else if(Integer.parseInt(split1[3])!=Integer.parseInt(split2[3]))return Integer.parseInt(split1[3])-Integer.parseInt(split2[3]);
return 0;
}
});
return res;
}
}