str1.str2.str3.str4
str1的长度有1,2,3 三种选择
str2的长度有1,2,3 三种选择
str3的长度有1,2,3 三种选择
str1,str2,str3 选定之后,str4也就确定了。
判断组合(str1,str2,str3,str4)是否满足要求
0<=str&&str<=255
不能出现 00,01, 000,001等情况,即str长度大于1时,不能以0开头。
总共就27中组合,手撕也可行。
import java.util.ArrayList;
import java.util.HashSet;
public class Solution {
public static void main(String[] args) {
new Solution().restoreIpAddresses("25525522135");
}
/**
* @param s string字符串
* @return string字符串ArrayList
*/
public ArrayList<String> restoreIpAddresses(String s) {
// write code here
String str1 = null;
String str2 = null;
String str3 = null;
String str4 = null;
ArrayList<String> itemList = new ArrayList<>(10);
for (int a1 = 1; a1 < 4 && a1 < s.length(); a1++) {
str1 = s.substring(0, a1);
for (int a2 = 1; a2 < 4 && a1 + a2 < s.length(); a2++) {
str2 = s.substring(a1, a1 + a2);
for (int a3 = 1; a3 < 4 && a1 + a2 + a3 < s.length(); a3++) {
str3 = s.substring(a1 + a2, a1 + a2 + a3);
str4 = s.substring(a1 + a2 + a3);
String tmp = make(str1, str2, str3, str4);
if (tmp != null) {
itemList.add(tmp);
}
}
}
}
return itemList;
}
private String make(String str1, String str2, String str3, String str4) {
if(str1.length()>1 && str1.charAt(0)=='0'){
return null;
}
if(str2.length()>1 && str2.charAt(0)=='0'){
return null;
}
if(str3.length()>1 && str3.charAt(0)=='0'){
return null;
}
if(str4.length()>1 && str4.charAt(0)=='0'){
return null;
}
if (Integer.parseInt(str1) <= 255 &&
Integer.parseInt(str2) <= 255 &&
Integer.parseInt(str3) <= 255 &&
Integer.parseInt(str4) <= 255) {
return str1 + "." + str2 + "." + str3 + "." + str4;
}
return null;
}
}