给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
。
合法的ip地址:4个数字 ,每个数字在0-255之间 ,用 . 分隔开
public List<String> restoreIpAddresses(String s) {
List<String> result = new ArrayList<>();
StringBuilder ip = new StringBuilder();
for (int a = 1; a < 4; a++) {
for (int b = 1; b < 4; b++) {
for (int c = 1; c < 4; c++) {
for (int d = 1; d < 4; d++) {
/*
* 1、保障下面subString不会越界
* 2、保障截取的字符串与输入字符串长度相同
* //1、2比较好理解,3比较有意思
* 3、不能保障截取的字符串转成int后与输入字符串长度相同
* 如:字符串010010,a=1,b=1,c=1,d=3,对应字符串0,1,0,010
* 转成int后seg1=0,seg2=1,seg3=0,seg4=10
* //所以需要下面这处判断if (ip.length() == s.length() + 3)
*/
if (a + b + c + d == s.length()) {
int seg1 = Integer.parseInt(s.substring(0, a));
int seg2 = Integer.parseInt(s.substring(a, a + b));
int seg3 = Integer.parseInt(s.substring(a + b, a + b + c));
int seg4 = Integer.parseInt(s.substring(a + b + c, a + b + c + d));
// 四个段数值满足0~255
if (seg1 <= 255 && seg2 <= 255 && seg3 <= 255 && seg4 <= 255) {
ip.append(seg1).append(".").append(seg2).append(".").
append(seg3).append(".").append(seg4);
// 保障截取的字符串转成int后与输入字符串长度相同
if (ip.length() == s.length() + 3) {
result.add(ip.toString());
}
ip.delete(0, ip.length());
}
}
}
}
}
}
return result;
}