93.复原IP地址
给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
示例1:
输入: “25525511135”
输出: [“255.255.11.135”, “255.255.111.35”]
示例2:
输入: “010010”
输出: [“0.10.0.10”, “0.100.1.0”]
解题思路
Java暴力,3层循环 333*3,如例2,应排除有前置0的情况,使用 字符串转数字再转字符串与原来的进行比较即可。
Code(java)
class Solution {
public List<String> restoreIpAddresses(String s) {
List<String> list = new ArrayList<>();
String s1, s2, s3, s4;
Integer i1, i2, i3, i4;
int len = s.length();
if (len < 4 || len > 12)
return list;
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3 && len - i >= 3 && len - i <= 9; j++) {
for (int k = 1; k <= 3 && len - i - j >= 2 && len - i - j <= 6; k++) {
if (len - i - j - k >= 1 && len - i - j - k <= 3) {
s1 = s.substring(0, i);
s2 = s.substring(i, i + j);
s3 = s.substring(i + j, i + j + k);
s4 = s.substring(i + j + k, len);
i1 = Integer.valueOf(s1);
i2 = Integer.valueOf(s2);
i3 = Integer.valueOf(s3);
i4 = Integer.valueOf(s4);
if (i1 <= 255 && i2 <= 255
&& i3 <= 255 && i4 <= 255
&& s1.equals(i1.toString())&& s2.equals(i2.toString()) /*消除前置0*/
&& s3.equals(i3.toString())&& s4.equals(i4.toString())) {
list.add(s1 + "." + s2 + "." + s3 + "." + s4);
}
}
}
}
}
return list;
}
}
Eclipse: /LeetCode/src/_19_month4/Q93_复原IP地址.java