题目要求

Given a string containing only digits, restore it by returning all possible valid IP address combinations.

For example:
Given "25525511135",

return ["255.255.11.135", "255.255.111.35"]. (Order does not matter)

返回字符串能够组成的所有IP地址。

思路与代码

IP地址由0/1位二进制数字构成,一共分为4个区间,每个区间8位。因此每个区间的值转化到十进制为0~255。那么我们只要划分出这四个区间,然后判断这四个区间的值是否符合标准即可。

    public List<String> restoreIpAddresses(String s) {
        List<String> result = new ArrayList<String>();
        int length = s.length();
        if(s==null || s.length()<4 || s.length()>12) return result; 
        for(int i = 1 ; i<4&&i<length-2 ; i++){
            for(int j = i+1 ; j<i+4&&j<length-1 ; j++){
                for(int k = j+1 ; k<j+4 && k<length ; k++){
                    String s1 = s.substring(0,i),
                            s2 = s.substring(i,j), 
                            s3 = s.substring(j,k), 
                            s4 = s.substring(k);
                    if(isValid(s1) && isValid(s2)&& isValid(s3) && isValid(s4)){
                        result.add(s1+"."+s2+"."+s3+"."+s4);
                    }
                }
            }
        }
        return result;
    }
    
    private boolean isValid(String s){
        if(s.length()!=1 && s.startsWith("0")) return false;
        if(Integer.parseInt(s)>255) return false;
        return true;
    }

clipboard.png
想要了解更多开发技术,面试教程以及互联网公司内推,欢迎关注我的微信公众号!将会不定期的发放福利哦~


raledong
2.7k 声望2k 粉丝

心怀远方,负重前行