有点难,一直在想怎么用dp解,其实根本不是用dp解的,大意了。
使用递归求解该题,递归函数传进去三个参数,第一个是s:剩余字符串,第二个是num,已经有的ip数字的数量,第三个是ip,目前已经组成好前面部分的ip,如255.255.255。然后如果构成完整的ip了,就存在self.result = []里就行了。
递归思路是我先取出第一个数字,第一个数字有多种可能,1位,两位,3位都有可能,然后取出第一个位的数字后,递归是找第二位数字,依次类推,如果能找到第4位数字,则是一个成功的ip,存起来就行了。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param s string字符串
# @return string字符串一维数组
#
class Solution:
def restoreIpAddresses(self , s: str):
# write code here
self.result = [] # 存储结果
self.getip(s , 0 , '')
return self.result
def getip(self, s , num , ip):
if len(s) == 0:
return
if num == 3:
if int(s)>=0 and int(s)<=255 and str(int(s)) == s:
self.result.append(ip+'.'+s)
else:
pass
else:
i = 1
while i <= len(s) and i <= 3:
tmp = s[:i]
if int(tmp) >= 0 and int(tmp) <= 255 and str(int(tmp)) == tmp:
if num == 0:
self.getip(s[i:],num+1,tmp)
else:
self.getip(s[i:],num+1,ip+'.'+tmp)
i+=1
s = "0000"
print(Solution().restoreIpAddresses(s))