原文:165. 比较版本号(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0165/

题目:

难度:Middle

相关话题:字符串

比较两个版本号 version1version2 。 如果 version1>version2 返回 1 ,如果 version1<version2 返回 -1 , 除此之外返回 0

你可以假设版本字符串非空,并且只包含数字和 . 字符。

. 字符不代表小数点,而是用于分隔数字序列。

例如, 2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。

你可以假设版本号的每一级的默认修订版号为 0 。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 34 。其第三级和第四级修订号均为 0

示例1:

输入: version1 = "0.1", version2 = "1.1"
输出: -1

示例 2:

输入:version1 = "1.0.1", version2 = "1"
输出: 1

示例 3:

输入: version1 = "7.5.2.4", version2 = "7.5.3"
输出: -1

示例4:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,&ldquo;01&rdquo; 和 &ldquo;001&rdquo; 表示相同的数字 &ldquo;1&rdquo;。

示例 5:

输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1没有第三级修订号,这意味着它的第三级修订号默认为 &ldquo;0&rdquo;。

提示:

  1. 版本字符串由以点( . )分隔的数字字符串组成。这个数字字符串可能 有前导零。

  2. 版本字符串不以点开始或结束,并且其中不会有两个连续的点。

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function(version1, version2) {
  let arr1=version1.split('.'),
      arr2=version2.split('.')

  if(arr1.length<arr2.length){
    let delt=arr2.length-arr1.length
    while(delt-->0) arr1.push('0')
  }else{
    let delt=arr1.length-arr2.length
    while(delt-->0) arr2.push('0')
  }
  for(let i=0;i<arr1.length;i++){
    let n1=+arr1[i],n2=+arr2[i]
    if(n1>n2)return 1
    else if(n1<n2)return -1
  }
  return 0
};

扩展阅读: