165.比较版本号

2020-04-17
比较版本号

比较两个版本号 version1 和 version2。

如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

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

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

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

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

其第三级和第四级修订号均为 0。

题解:
字符串分割
/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function (version1, version2) {
  version1 = version1.split('.'); // 通过.分割成数组
  version2 = version2.split('.');
  let handler = (v1, v2) => { // 判断数组的每一项的大小
    if (v1 > v2) return 1;
    else if (v1 < v2) return -1;
  }
  const len = Math.max(version1.length, version2.length); // 取较长的长度作为循环长度
  let res = 0; // 结果
  for (let i = 0; i < len; i++) {
    let v1 = i < version1.length ? version1[i] : 0; // 若i<数组长度则取值 否则补0
    let v2 = i < version2.length ? version2[i] : 0;
    res = handler(parseInt(v1), parseInt(v2)); // 去掉v1 v2前面的0 
    if(res !== undefined) return res; // 如果有返回值则说明比较大小有结果 如果没有返回值则说明相等
  }
  return 0; // 如果一直相等 res就一直是undefined 所以返回0
};
原文地址:https://www.cnblogs.com/lanpang9661/p/12717576.html