LeetCode 93. Restore IP Addresses
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
解题思路
由题意,需要编写程序来分割一个给定的字符串,使得其能够表示为一个合法的IP地址。首先分割好的字符串需要满足IP地址的格式和数据范围,其次需要找到所有合法的分割方法。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。了解IP地址的格式和数据范围之后,由于可以从头到尾分割字符串,IP地址一共有4个部分,故可以运用递归的思想。在每一层递归中,判断接下来的数字是否符合要求,如果符合要求就加入当前组合。当组合满足条件:包含给定字符串的所有数字,且包含4个部分时,该分割就结束了。
源代码
class Solution(object):
def restoreIpAddresses(self, s):
"""
:type s: str
:rtype: List[str]
"""
ans = []
self.dfs(s, 0, 0, "", ans)
return ans
def match(self, length, s, start):
if length == 1:
return True
if length == 2 and s[start] != "0":
return True
if length == 3 and s[start] != "0" and int(s[start:start + length]) <= 255:
return True
return False
def dfs(self, s, start, depth, path, ans):
if depth == 4:
if start == len(s):
ans.append(path[:-1])
return
for length in xrange(1, 4):
if start + length <= len(s):
if self.match(length, s, start):
self.dfs(s, start + length, depth + 1, path + s[start:start + length] + ".", ans)