问题传送门:https://leetcode.cn/problems/compare-version-numbers/description/
本题核心:划分,比较,长度差别考虑。
本题实际上难度不高,只是JS生疏了,记录一下一些简单的要点。
当下有如下数组与代码:
JSlet sampleArray = ['123','456','789','000']
console.log(sampleArray)
其输出的结果为:
['123', '456', '789', '000']
如果使用map(type)
,可以进行自动的类型转换,如下所示:
JSlet sampleArray = ['123','456','789','000']
sampleArray = sampleArray.map(Number)
console.log(sampleArray)
其输出的结果为:
[123, 456, 789, 0]
同理,将type
设置成String
,可以实现整型数组到字符串数组的转换。
有时我们会面对长度不确定的数组问题,例如,你需要比较每一个数组,但你不知道哪个会比较长,直接使用length
进行遍历可能会导致较短的数组的索引越界问题。
这个时候,我们可以尝试使用删除元素的方法。即:我们访问数组的第一个/最后一个元素,使用完成之后如果这个元素不会再被访问到,可以使用shift()
或pop()
方法删除。
使用这种方法只需要一个while
循环,在两个数组长度均不为0时持续判断并删除数组,直到有一个数组长度被遍历完,跳出循环,此时再对剩余长度进行判定,将剩余元素操作完成即可。
需要注意的是,Array.shift()
删除数组的首个元素,Array.pop()
删除数组的最后一个元素。这两种方法均在原数组上进行操作,会改变原数组的长度。返回值为删除掉的元素。
JSlet sampleArray = ['123','456','789','000']
console.log(sampleArray)
sampleArray.shift()
console.log(sampleArray)
sampleArray.pop()
console.log(sampleArray)
输出结果为:
['123', '456', '789', '000'] ['456', '789', '000'] ['456', '789']
JS/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
var compareVersion = function(version1, version2) {
let array_v1 = version1.split('.').map(Number)
let array_v2 = version2.split('.').map(Number)
while (array_v1.length !== 0 && array_v2.length !== 0) {
if (array_v1[0] === array_v2[0]) {
array_v1.shift()
array_v2.shift()
continue
}
if (array_v1[0] > array_v2[0]) {
return 1
}
else {
return -1
}
}
if (array_v1.length !== 0) {
for (let i = 0; i < array_v1.length; i++) {
if (array_v1[i] !== 0) {
return 1
}
}
return 0
}
if (array_v2.length !== 0) {
for (let i = 0; i < array_v2.length; i++) {
if (array_v2[i] !== 0) {
return -1
}
}
return 0
}
return 0
};
本文作者:Jeff Wu
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!