leetcode_gym/_problems/restoreIpAddresses.md
2026-08-25 19:14:07 -06:00

1.9 KiB

layout, title, last_solved, category, leetcode_url, status
layout title last_solved category leetcode_url status
page Restore IP Addresses backtracking https://leetcode.com/problems/restore-ip-addresses/ Not Solved

Problem

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 "192.168@1.1" are invalid IP addresses. 

 

Example 1:

Input: s = "25525511135"
Output: ["255.255.11.135","255.255.111.35"]
Example 2:

Input: s = "0000"
Output: ["0.0.0.0"]
Example 3:

Input: s = "1111"
Output: ["1.1.1.1"]
Example 4:

Input: s = "010010"
Output: ["0.10.0.10","0.100.1.0"]
Example 5:

Input: s = "101023"
Output: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

Solution

{% highlight python %}

def restoreIpAddresses(self, s: str) -> List[str]:
    
    def dfs(s, index, path, res):
        
        if index==4:
            if not s:   # why is this here?
                res.append( path[:-1] )
            return
        
        
        
        for i in range(1,4):
            
            if i<=len(s):
                
                if i==1:
                    dfs(s[1:], index+1, path+s[:i]+".", res)
                
                elif i==2 and s[0]!="0":
                    dfs(s[i:], index+1, path+s[:i]+".", res)
                    
                elif i==3 and s[0]!="0" and int(s[:3]) <= 255:
                    dfs(s[i:], index+1, path+s[:i]+".", res)
    
    
    res = []
    dfs(s, 0, "", res)
    return res

{% endhighlight %}


{% highlight python %}

{% endhighlight %}

image1