暴力算法 IPv4地址由32位2进制数组成,这32位数字分为4组每组位8位2进制数,及每组数的合法大小为(0,255)。每组中都不需要多余的前缀0,即若某组为0,则其只用一个0表示,若某组数非0,其前面不会由0.且每组数的大小不能超过255. 利用这个基本原则,进行暴力枚举。
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return string字符串ArrayList
*/
private boolean judge(String str){
//每组地址满足长度不为1,且第一位为0,或者大于255时不满足IPv4地址定义
if(str.length()!=1&&str.charAt(0)=='0'||Integer.parseInt(str)>255){
return false;
}
return true;
}
public ArrayList<String> restoreIpAddresses (String s) {
// write code here
ArrayList<String> res = new ArrayList<>();
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 4; j++) {
for (int k = 1; k < 4; k++) {
for (int l = 1; l < 4; l++) {
if(i+j+k+l == s.length()){
String s1 = s.substring(0,i);
String s2 = s.substring(i,i+j);
String s3 = s.substring(i+j,i+j+k);
String s4 = s.substring(i+j+k,i+j+k+l);
if(judge(s1)&&judge(s2)&&judge(s3)&&judge(s4)){
String tmp = s1 +"."+s2+"."+s3+"."+s4;
res.add(tmp);
}
}
}
}
}
}
return res;
}
}

京公网安备 11010502036488号