restore ip addresses

又是一道backtracking的题,不知道当时为啥没做出来。也可能是着急完成一定数目,一旦遇到不会的就看答案吧。
这道题还挺简单的,debug的时候有一个trick的,”3” > “255”的,所以不要比较string还是转换为int再比较。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class (object):
def restoreIpAddresses(self, s):
"""
:type s: str
:rtype: List[str]
"""
if len(s) > 12 or len(s) < 4:
return []
res = []
self.dfs(s, 0, [], res)
return res
def dfs(self, s, pos, cur, res):
if pos >= len(s):
if len(cur) == 4:
res.append(".".join(cur))
return
if s[pos] == "0":
cur.append(s[pos])
self.dfs(s, pos + 1, cur, res)
cur.pop()
else:
for i in range(1, 4):
if pos + i <= len(s) and 0 <= int(s[pos:pos + i]) <= 255:
cur.append(s[pos:pos + i])
self.dfs(s, pos + i, cur, res)
cur.pop()