题解 | #比较版本号#
比较版本号
http://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
方法一:
const nums1 = version1.split('.')
const nums2 = version2.split('.')
let i = 0
// 将分割后的数组各项转化为数字即可解决前导零的问题
// 当有多出的修订号,用0代替
while(i < nums1.length || i < nums2.length){
let x = 0 , y = 0
if(i < nums1.length) x = parseInt(nums1[i])
if(i < nums2.length) y = parseInt(nums2[i])
if(x > y) return 1
if(x < y) return -1
i++
}
return 0
};
方法二:在方法一的基础上改进
function compare( version1 , version2 ) {
let [m , n] = [version1.length , version2.length]
let i = 0, j = 0
// 为了优化空间复杂度,可以边解析版本号,边将各项转化为数字即可解决前导零的问题
// 当有多出的修订号,用0代替
while(i < m || j < n){
let x = 0 , y = 0
while(i < m && version1[i] !== '.'){
x = x * 10 + version1[i].charCodeAt() - '0'.charCodeAt()
i++
}
// 略过 '.'
i++
while(j < n && version2[j] !== '.'){
y = y * 10 + version2[j].charCodeAt() - '0'.charCodeAt()
j++
}
// 略过 '.'
j++
if(x !== y){
return x > y ? 1 : -1
}
}
return 0
}
module.exports = {
compare : compare
};