例如:”0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、”192.168.1.312” 和 “192.168@1.1“ 是 无效 IP 地址。 给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
classSolution: defrestoreIpAddresses(self, s: str) -> List[str]: defdfs(index, part_count): # 如果获取到四个部分,表明应该结束了,如果刚好字符串也遍历完成,则可以获得一个答案 if part_count == COUNT: if index == n: ans.append('.'.join([str(e) for e in parts])) return # 如果字符串遍历结束,但是还没有获得四个part,则返回 if index == n: return if s[index] == '0': parts[part_count] = 0 dfs(index+1, part_count+1) part = 0 for i inrange(index, n): part = 10*part + (ord(s[i])-ord('0')) if0 < part <= 0xFF: parts[part_count] = part dfs(i+1, part_count+1) else: break
# ip地址最多有4个部分组成 COUNT = 4 n = len(s) parts = [0]*COUNT ans = [] dfs(0, 0) return ans