165. Compare Version Numbers

26 年 3 月 4 日 星期三
350 字
2 分钟

165. Compare Version Numbers

Screenshot 2026-03-04 at 9.20.48 pm
js
/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function (version1, version2) {
  // 将版本号字符串按小数点 "." 分割成数组,方便逐位比较
  // 例如:"1.0.1" → ["1", "0", "1"],"1.0" → ["1", "0"]
  const versionParts1 = version1.split('.')
  const versionParts2 = version2.split('.')

  // 获取两个版本号数组的长度,用于后续循环边界判断
  const len1 = versionParts1.length
  const len2 = versionParts2.length

  // 循环比较每一位版本号,循环条件:只要有一个数组还有未比较的元素就继续
  // 解决版本号位数不一致的问题(如 "1.0" 和 "1.0.0")
  for (let i = 0; i < len1 || i < len2; i++) {
    // 取出当前位的版本号:
    // 1. 如果当前索引在数组范围内,将字符串转成整数(避免字符串比较的坑,如"10"<"2")
    // 2. 如果超出数组范围,补0(符合版本号比较规范,短版本号末尾补0)
    const currentVer1 = i < len1 ? parseInt(versionParts1[i], 10) : 0
    const currentVer2 = i < len2 ? parseInt(versionParts2[i], 10) : 0

    // 比较当前位的版本号,若不相等则直接返回结果
    // 无需继续比较后续位,提升执行效率
    if (currentVer1 !== currentVer2) {
      // 若version1当前位更小,返回-1;否则返回1
      return currentVer1 < currentVer2 ? -1 : 1
    }
  }

  // 所有位都比较完毕且全部相等,说明两个版本号完全相同
  return 0
}

文章标题:165. Compare Version Numbers

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/165_compare_version_numbers[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。