返回
对 LeetCode 468 问题进行全面剖析:验证 IP 地址
前端
2023-12-04 05:06:50
问题陈述
给定一个字符串 queryIP
,您的任务是确定它是否表示一个有效的 IP 地址。IP 地址可以是 IPv4 或 IPv6 格式。
IPv4 地址由四部分组成,每部分都是一个介于 0 到 255 之间的数字,由点号分隔。例如:
192.168.1.1
IPv6 地址由八部分组成,每部分都是一个由冒号分隔的四位十六进制数。例如:
2001:0db8:85a3:08d3:1319:8a2e:0370:7334
解决方法
要验证 IP 地址,我们可以遵循以下步骤:
-
确定 IP 地址的类型:
- 如果
queryIP
包含点号,则它是一个 IPv4 地址。 - 否则,如果
queryIP
包含冒号,则它是一个 IPv6 地址。
- 如果
-
IPv4 验证:
- 将
queryIP
拆分为四部分。 - 对于每个部分:
- 检查它是否是一个介于 0 到 255 之间的整数。
- 检查它是否不以 0 开头(除非它是 0 本身)。
- 将
-
IPv6 验证:
- 将
queryIP
拆分为八部分。 - 对于每个部分:
- 检查它是否是长度为 1 到 4 的十六进制数。
- 检查它是否不以 0 开头(除非它是 0 本身)。
- 将
如果所有部分都通过验证,则 queryIP
是一个有效的 IP 地址。否则,它不是一个有效的 IP 地址。
Python 实现
以下是一个 Python 函数来验证 IP 地址:
def is_valid_ip_address(query_ip):
"""
验证一个字符串是否表示一个有效的 IP 地址。
参数:
query_ip (str): 要验证的字符串。
返回:
bool: `True` 如果 `query_ip` 是一个有效的 IP 地址,否则为 `False`。
"""
# 确定 IP 地址的类型
if '.' in query_ip:
ip_type = 'IPv4'
elif ':' in query_ip:
ip_type = 'IPv6'
else:
return False
# IPv4 验证
if ip_type == 'IPv4':
parts = query_ip.split('.')
if len(parts) != 4:
return False
for part in parts:
try:
int_part = int(part)
if not (0 <= int_part <= 255) or (int_part == 0 and len(part) > 1):
return False
except ValueError:
return False
# IPv6 验证
elif ip_type == 'IPv6':
parts = query_ip.split(':')
if len(parts) != 8:
return False
for part in parts:
if not (1 <= len(part) <= 4):
return False
try:
int_part = int(part, 16)
if not (0 <= int_part <= 65535) or (int_part == 0 and len(part) > 1):
return False
except ValueError:
return False
# 所有部分都通过验证
return True
总结
验证 IP 地址是 LeetCode 中一个常见的问题。通过理解 IP 地址的语法并遵循上述步骤,您可以有效地解决此问题。我们提供的 Python 实现提供了上述算法的清晰且可复用的实现。通过练习和应用本文中介绍的技术,您可以提高解决此类问题的技能,并推进您的编程之旅。