这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战
题目描述
解题思路
- 首先使用split将元素根据标点符号点,进行分割。
- 对数组中的每一个元素进行去零操作,并不是所有的元素都要进行去零操作,只有该元素包含了两个字符或者以上内容的时候,并且该元素的第一个字母是0才需要进行去零操作,其余则不需要去零操作。
- 填0操作:首先比较两个数组的长度,长度较短的数组通过填0操作,补充到相同的长度,这样可以方便后续的比较。
- 比较:定义两个指针,分别指向这两个数组,同时往后遍历,只要比较到大小关系则进行返回对应的值。
AC代码
var compareVersion = function (version1, version2) {
const arr1 = version1.split('.');
const arr2 = version2.split('.');
// 对数组中的每一个字符串进行去0操作:只有两位以上的才需要进行去0操作
function deleteZero(arr) {
for (let i = 0; i < arr.length; i++) {
while (arr[i].length > 1 && arr[i][0] === '0') {
let temp = arr[i].split('');
temp.shift();
arr[i] = temp.join('');
}
}
}
deleteZero(arr1);
deleteZero(arr2);
// 进行填0操作
// 首先比较两个数组的长度
if (arr1.length > arr2.length) {
let flag = arr2.length
for (let i = flag; i < arr1.length; i++) {
arr2[i] = '0';
}
}
else if (arr1.length < arr2.length) {
let flag = arr1.length;
for (let i = flag; i < arr2.length; i++) {
arr1[i] = '0';
}
}
let left = 0;
let right = 0;
while (left < arr1.length) {
if (Number(arr1[left]) === Number(arr2[right])) {
left++;
right++;
continue;
}
if (Number(arr1[left]) < Number(arr2[right])) {
return -1;
}
if (Number(arr1[left]) > Number(arr2[right])) {
return 1;
}
}
return 0;
};
题目反思
本题可能不是最优解,但是通过这个题目告诉我们的是面对问题不要畏惧,只要理清思路,找到题目中的案例之间的规律,题目都是能够迎刃而解的,下面让我们分析下本题都用到了哪些知识点。
- 学会使用split将字符串分割为数组。
- 学会给数组中的元素进行去除和填充操作。