本文将讲解如何比较两个版本号字符串,判断其大小关系。我们会分析题目要求,提供基于 Swift 的高效解决方案,并深入解读代码逻辑和性能分析。最后,我们会通过实例测试结果验证代码的正确性。
给你两个 版本号字符串 version1
和 version2
,请你比较它们。版本号由被点 '.'
分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。
比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 0
。
返回规则如下:
version1 < version2
返回 -1
,version1 > version2
返回 1
,0
。输入: version1 = "1.2", version2 = "1.10"
输出: -1
解释:
version1 的第二个修订号为 "2",version2 的第二个修订号为 "10":2 < 10,所以 version1 < version2。
输入: version1 = "1.01", version2 = "1.001"
输出: 0
解释:
忽略前导零,"01" 和 "001" 都代表相同的整数 "1"。
输入: version1 = "1.0", version2 = "1.0.0.0"
输出: 0
解释:
version1 有更少的修订号,每个缺失的修订号按 "0" 处理。
1 <= version1.length, version2.length <= 500
version1
和 version2
仅包含数字和 '.'
version1
和 version2
都是 有效版本号version1
和 version2
的所有修订号都可以存储在 32 位整数 中为了解决这个问题,我们可以按以下步骤实现:
.
分割为修订号数组。以下是用 Swift 实现的解决方案:
func compareVersion(_ version1: String, _ version2: String) -> Int {
let v1Components = version1.split(separator: ".").map { Int($0) ?? 0 }
let v2Components = version2.split(separator: ".").map { Int($0) ?? 0 }
let maxLength = max(v1Components.count, v2Components.count)
for i in 0..<maxLength {
let v1Value = i < v1Components.count ? v1Components[i] : 0
let v2Value = i < v2Components.count ? v2Components[i] : 0
if v1Value < v2Value {
return -1
} else if v1Value > v2Value {
return 1
}
}
return 0
}
let v1Components = version1.split(separator: ".").map { Int($0) ?? 0 }
let v2Components = version2.split(separator: ".").map { Int($0) ?? 0 }
split(separator: ".")
将版本号按 .
分割为数组。map
将每个字符串转为整数,同时处理转换失败的情况(例如空字符串)。let maxLength = max(v1Components.count, v2Components.count)
for i in 0..<maxLength {
let v1Value = i < v1Components.count ? v1Components[i] : 0
let v2Value = i < v2Components.count ? v2Components[i] : 0
if v1Value < v2Value {
return -1
} else if v1Value > v2Value {
return 1
}
}
0
到 maxLength
,在较短数组的缺失部分补 0。0
。测试代码:
let result1 = compareVersion("1.2", "1.10")
print(result1) // 输出: -1
let result2 = compareVersion("1.01", "1.001")
print(result2) // 输出: 0
let result3 = compareVersion("1.0", "1.0.0.0")
print(result3) // 输出: 0
测试结果说明:
2 < 10
,返回 -1
。0
。0
,两个版本号完全相等,返回 0
。O(n)
,其中 n
为版本号的最大长度。我们只需遍历两个版本号的修订号。O(n)
,用于存储分割后的数组。通过简单的字符串分割和整数比较,我们可以高效地比较两个版本号。该方法不仅易于实现,还具有良好的时间和空间复杂性。我们可以进一步扩展此方法,用于处理更加复杂的版本号格式,例如带有后缀的版本号(如 1.0-alpha
)。
alpha
, beta
)的版本比较。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。