题解 | #比较版本号#

比较版本号

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

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
uu们,拒offer时hr很生气怎么办我哭死
爱睡觉的冰箱哥:人家回收你的offer,或者oc后没给你发offer的时候可不会愧疚你,所以你拒了也没必要愧疚他。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务