93. Restore IP Addresses

Description

Given a string s containing only digits. Return all possible valid IP addresses that can be obtained from s. You can return them in any order.

A valid IP address consists of exactly four integers, each integer is between 0 and 255, separated by single points and cannot have leading zeros. For example, "0.1.2.201" and "192.168.1.1" are valid IP addresses and "0.011.255.245", "192.168.1.312" and "[email protected]" are invalid IP addresses.

Constraints

  • 0 <= s.length <= 3000

  • s consists of digits only.

Approach

Examples

Input: s = "25525511135"

Output: ["255.255.11.135", "255.255.111.35"]

Solutions

/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    public List<String> restoreIpAddresses(String s) {
        List<String> resultList = new ArrayList<>();
        int n = s.length();
        if(n < 4 || n > 12) return resultList;
        for(int p = 1; p < 4; p++) {
            for(int q = 1; q < 4; q++) {
                for(int r = 1; r < 4; r++) {
                    for(int t = 1; t < 4; t++) {
                        if(p+q+r+t == n) {
                            int v1 = Integer.parseInt(s.substring(0, p));
                            if(v1 > 255) continue;
                            
                            int v2 = Integer.parseInt(s.substring(p, p+q));
                            if(v2 > 255) continue;
                            
                            int v3 = Integer.parseInt(s.substring(p+q, p+q+r));
                            if(v3 > 255) continue;
                            
                            int v4 = Integer.parseInt(s.substring(p+q+r));
                            if(v4 > 255) continue;
                            
                            String value = v1 + "." + v2 + "." + v3 + "." + v4;
                            if(value.length() == n+3) {
                                resultList.add(value);
                            }
                        }
                    }
                }
            }
        }
        return resultList;
    }
}

Follow up

Last updated

Was this helpful?