liuguanyu / quiz-every-meeting

8 stars 0 forks source link

2018-06-07 #12

Open tataqiuqiu opened 6 years ago

tataqiuqiu commented 6 years ago

比较两个版本号 version1 和 version2。 如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

你可以假设版本字符串非空,并且只包含数字和 . 字符。

. 字符不代表小数点,而是用于分隔数字序列。

例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。

例如: 输入: version1 = "0.1", version2 = "1.1" 输出: -1

输入: version1 = "1.0.1", version2 = "1" 输出: 1

输入: version1 = "7.5.2.4", version2 = "7.5.3" 输出: -1

liuguanyu commented 6 years ago
var versionCompare = (v1, v2) => {
    [v1, v2] = [v1, v2].map(el => el.trim())

    if (![v1,v2].every(el => /^\d+?(\.(?=\d)\d+?)*?$/.test(el))){
        return 0
    }

    var [v1a, v2a] = [v1, v2].map(el => el.split("."))

    for(var i = 0; i < v1a.length; ++i){
        if (v2a[i] === undefined){
            return 1
        }
        else if (v1a[i] > v2a[i]){
            return 1
        }
        else if (v1a[i] < v2a[i]){
            return -1
        }
    }

    return (v2a[i] === undefined) ? 0 : -1
}
tataqiuqiu commented 6 years ago

贴个参考答案

/**
 * @param {string} version1
 * @param {string} version2
 * @return {number}
 */
var compareVersion = function(version1, version2) {
            // 將版本號用小數點切開
            var array1 = version1.split(".");
            var array2 = version2.split(".");

            // 取版本號較長的跑loop
            var max = array1.length > array2.length ? array1.length:array2.length ;

            for(var i = 0 ; i < max ; i++ ){
                var i1 = parseInt(array1[i]);
                var i2 = parseInt(array2[i]);

                // 如果其中一邊後面已經沒版本號,後面就設為0
                // ex.  [1.0.1], [1.0] 轉換成 [1.0.1], [1.0.0]作比對   
                i1 = array1.length < i+1 ? 0 : i1;
                i2 = array2.length < i+1 ? 0 : i2;           

                // 如果相同位置的版號數字不一樣,就可以判斷哪個版號大
                // ex. 1.1.5 < 1.2.2,因為在第二個位置時 2>1 就可以得到答案                 
                if(i1 > i2){
                    return 1;
                } 
                if(i2 > i1){
                    return -1;
                }
            }
            return 0;
};
chunpu commented 6 years ago
function compareVersion(v1, v2) {
    var arr1 = v1.split('.')
    var arr2 = v2.split('.')
    for (var i = 0; i < Math.max(arr1.length, arr2.length); i++) {
        var delta = (arr1[i] || 0) - (arr2[i] || 0)
        if (delta < 0) return -1
        if (delta > 0) return 1
    }
    return 0
}