Skip to main content

165.版本号比较

标签: string

难度: Medium

通过率: 41.69%

原题链接: https://leetcode.com/problems/compare-version-numbers/description/

题目描述

给定两个版本号字符串 version1version2,请比较它们。版本号由点 . 分隔的修订版本组成,修订版本的值是其转化为整数后的值,不考虑前导零。

比较两个版本号需要从左到右逐个比较各自的修订版本值。如果一个版本号比另一个版本号的修订版本少,则将缺失的修订版本视为0。

返回如下结果:

  • 如果 version1 < version2 返回 -1。
  • 如果 version1 > version2 返回 1。
  • 否则返回 0。

解题思路

为了比较两个版本号,我们可以按照如下步骤进行:

  1. 使用点 . 来分割版本号字符串,得到各个修订版本值。
  2. 将修订版本值转换为整数值,忽略任何前导零。
  3. 按照从左到右的顺序比较每个修订版本。
  4. 当一个版本号的修订个数少于另一个版本号时,将缺少的修订部分视为 0 进行比较。
  5. 如果在某次比较中,version1 的某个修订值小于 version2 的对应修订值,返回 -1
  6. 如果 version1 的某个修订值大于 version2 的对应修订值,返回 1
  7. 如果在所有修订版本的比较中都相同,返回 0

代码实现

def compareVersion(version1: str, version2: str) -> int:
# 使用 '.' 将版本号字符串分割成整数
v1 = list(map(int, version1.split('.')))
v2 = list(map(int, version2.split('.')))

# 找出较长的版本号列表长度
length = max(len(v1), len(v2))

# 逐一比较修订版本
for i in range(length):
# 若版本号列表较短,补充为0
num1 = v1[i] if i < len(v1) else 0
num2 = v2[i] if i < len(v2) else 0
# 比较大小
if num1 < num2:
return -1
elif num1 > num2:
return 1
return 0

复杂度分析

时间复杂度为 O(n+m)O(n + m),其中 nnmm 分别是版本号字符串 version1version1version2version2 的长度。

空间复杂度为 O(n+m)O(n + m),用于存储分割后的修订版本。