Restore IP Address

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)

四分法

复杂度

时间 O(N^2) 空间 O(1)

思路

用三个点将字符串分成四段,验证每一段是否是有效的。我们只要控制这三个分割点就行了,注意约束条件有两个,一个是一段字符串不超过3个字母,另一个是控制好每段字符串最远结束的位置,比如第一个字符串最多延伸到倒数第4个字母。

注意

使用Integer.valueOf()时要确保所得到数不会超界。

代码

public class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> res = new LinkedList<String>();
        int len = s.length();
        // 第一个分割点
        for(int i = 1; i < 4 && i < len - 2; i++){
            // 第二个分割点
            for(int j = i + 1; j < i + 4 && j < len - 1; j++){
                // 第三个分割点
                for(int k = j + 1; k < j + 4 && k < len ; k++){
                    String s1 = s.substring(0,i), s2 = s.substring(i, j), s3 = s.substring(j, k), s4 = s.substring(k, s.length());
                    if(isValid(s1)&&isValid(s2)&&isValid(s3)&&isValid(s4)) res.add(s1+"."+s2+"."+s3+"."+s4);
                }
            }
        }
        return res;
    }
    
    private boolean isValid(String sub){
        return sub.length()<=3 && ((sub.charAt(0) != '0' && Integer.valueOf(sub) <=255) || sub.equals("0"));
    }
}

ethannnli
858 声望360 粉丝