1.9 KiB
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 %}