开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
题目
给你两个版本号 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;
};