直接dfs搞一发就行了,遍历’.'的所有可能情况,然后输出可行解。需要判断s的长度大于12的情况,因为这样肯定是不合法的,如果不判定会超时。还需要注意s1 == str(num)
这条判断语句,因为’025’转化为int类型后也是在0和255之内,但不是合法的,所以需要通过s1 == str(num)
语句来判断这类不合法的字符串。
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
def isValid(s1):
num = int(s1)
if num >= 0 and num <= 255 and s1 == str(num):
return num
else:
return -1
l = len(s)
if l > 12:
return []
result = []
def dfs(ind, count, tmp):
if ind == l and count == 4:
result.append(tmp[1:])
return
for i in range(3):
if ind+1+i > l:
break
num = isValid(s[ind: ind+1+i])
if num == -1:
continue
else:
tmp1 = tmp+'.'+str(num)
dfs(ind+1+i, count+1, tmp1)
return
dfs(0, 0, "")
return result