题目
给你两个版本号 version1
和 version2
,请你比较它们。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。
输入: version1 = "1.01", version2 = "1.001" 输出: 0 解释: 忽略前导零,"01" 和 "001" 都表示相同的整数 "1"
思路一
我们先使用split方法将版本号分割成为数组,然后取两个版本号最大长度进行迭代,使用Math.max方法获取到两个形参的最大值,存储在len变量中,然后使用循环将数组元素逐个转换成数字,比较大小,使用三目运算进行判断,如果数组值若不为数值,则定义为0,并用num1变量和num2变量进行存储,在将当前num1和num2比较,如果num1大则返回1,如果num2大返回-1,如果相等则不行操作,如果没有返回则说明两者相等,返回0即可
const compareVersion = (version1, version2) => { let [v1, v2] = [version1.split('.'), version2.split('.')]; let len = Math.max(v1.length, v2.length); for (let i = 0; i < len; i++) { const num1 = v1[i] ? parseInt(v1[i]) : 0; const num2 = v2[i] ? parseInt(v2[i]) : 0; if (num1 > num2) { return 1; } else if (num1 < num2) { return -1; } } return 0; };
思路二
我们先使用split方法处理字符串,将其转换成数组,再进行比较数组的长度,使用||运算符判断v1[i]或者v2[i]存不存在,不存在的话就给指定数组添加0,在进行比较数组的每一项如果v1大则返回1,如果v2大则返回-1,如果相等则返回0作者:清风热忱
var compareVersion = function (version1, version2) { let v1 = version1.split('.'); let v2 = version2.split('.'); v1 = v1.map(item => Number.parseInt(item)); v2 = v2.map(item => Number.parseInt(item)); let len = Math.max(v1.length, v2.length); for (let i = 0; i < len; i++) { v1[i] || v1.push(0); v2[i] || v2.push(0); if (v1[i] > v2[i]) { return 1; } else if (v1[i] < v2[i]) { return -1; } } return 0; };