Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)
思路:简单的背包问题,isNumright()中判断了当前的ip子字段是否是正确的表示,isIPTrue()中采用了递归的思想,并且保证dep[]中的值是正确的ip地址,用ret[]数组来保存正确的ip地址,注意dep[:]问题(数组引用与复制),最后restoreIpAddresses()来处理输出格式问题。
class Solution(object):
def isNumright(self,s):
if len(s)>0 and int(s)<=255:
if len(s)==1:
return True
elif s[0]=='0':
return False
else:
return True
else:
return False
def isIPTrue(self,s,cnt=0,dep=[-1,-1,-1,-1],ret=[]):
if cnt==3:
if self.isNumright(s):
dep[cnt]=s
ret.append(dep[:])
else:
if len(s)>0:
for flag in range(1,min(4,len(s))):
if self.isNumright(s[0:flag]):
dep[cnt]=s[0:flag]
ret=self.isIPTrue(s[flag:],cnt+1,dep,ret)
return ret
def restoreIpAddresses(self, s):
"""
:type s: str
:rtype: List[str]
"""
cnt=0
dep=[-1,-1,-1,-1]
ret=[]
ans=self.isIPTrue(s,cnt,dep,ret)
result=[]
for i in range(len(ans)):
tmp=ans[i][0]+'.'+ans[i][1]+'.'+ans[i][2]+'.'+ans[i][3]
result.append(tmp)
return result