题解 | #比较版本号#

比较版本号

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

相关推荐

沉淀一会:**圣经 1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务