暴力算法 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;
    }
}