93. Restore IP Addresses
# Runtime: 20 ms, faster than 99.80%; Memory Usage: 14.2 MB, less than 100.00%
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
res = []
def trackback(track, index, size):
if index >= size or len(track) == 3:
# 当index>=size表示,前边已经把数选完,无法满足len(track)等于4
# 当index+1 == size时,即最后一个数只剩1位,肯定满足
# 当index<size-1时,即最后一个数多于1位,所以要保证首位不为"0"且在0-255之间
if (index+1 == size) or (index < size-1 and s[index] != "0" and int(s[index:]) < 256):
track.append(s[index:])
res.append(".".join(track))
track.pop()
return
if s[index] == "0": # 当为"0"时,因为不能存在前置零,所以只有一种选择"0"
track.append("0")
trackback(track, index+1, size)
track.pop()
else:
for i in range(1,4): # 选择列表,因为每个数范围为0-255,所以最多为3位
tmp = int(s[index:index+i])
if tmp > 255: # 当该数大于255时,该选择无效
continue
track.append(s[index:index+i]) # 选择
trackback(track, index+i, size)
track.pop() # 撤销选择
track = []
trackback(track, 0, len(s))
return res
本文介绍了一种有效的IP地址恢复算法实现方法,通过回溯搜索策略将字符串重新组合成合法的IPv4地址。针对不同情况(如以0开头的字段、字段长度等),采取了特定的处理逻辑以确保生成的每部分都在0到255的有效范围内。
756

被折叠的 条评论
为什么被折叠?



