93. Restore IP Addresses

From Hitachi

Link: 93

Description

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)

Solution

子问题拆解

本质是三个点的放置,组合问题肯定dfs,但是这里用for loop比递归容易写,for loop里做剪枝,注意验证IP需要network相关知识

过程可视化

打破假设

类比

Code

//Java

class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> result = new ArrayList<>();
        for(int i = 1; i<4 && i < s.length()-2; i++){
            for(int j = i+1; j<i+4 && j<s.length()-1; j++){
                for(int k = j+1; k<j+4 && k<s.length(); k++){
                    if( isValid(s.substring(0,i)) && 
                                isValid(s.substring(i,j)) && 
                                        isValid(s.substring(j,k)) && 
                                                isValid(s.substring(k,s.length()))){
                                                    String newip = s.substring(0,i) + "." + 
                                                              s.substring(i,j) + "." +
                                                              s.substring(j,k) + "."+
                                                              s.substring(k,s.length());
                                                    result.add(newip);
                                                }
                }
            }
        }
        return result;

    }

    public boolean isValid(String ip){
        if(ip.length() < 1 || ip.length() > 3){
            return false;
        }
        if(ip.length() > 1 && ip.charAt(0) == '0'){
            return false;
        }
        if(Integer.valueOf(ip) > 255){
            return false;
        }
        return true;
    }
}

Analysis

Reference

results matching ""

    No results matching ""