题解 | #比较版本号#

比较版本号

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
};
全部评论

相关推荐

头像 会员标识
02-14 15:34
门头沟学院 Java
Java抽象带篮子:专业技能怎么写可以看看我发的帖子
点赞 评论 收藏
分享
做人要有梦想dji:最新工位查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务