LeetCode 165. Compare Version Numbers

題目

Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character. The . character does not represent a decimal point and is used to separate number sequences. For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37

翻譯

比較兩個版本號,version1與version2,如果version1 > version2 回傳1,如果version2 > version1 回傳-1,相等的話回傳0。

你可以假設版本號裡面只有數字跟".","."在這邊不是表示小數點而是用來分割子版本的序號。
舉例來說,2.5不是數字2+0.5,而是第2.5版。

下面是一些範例

0.1 < 1.1 < 1.2 < 13.37

思路

版本號是用數字與"."組成,因此先將版號用"."分開放在陣列中,接著就可以跑迴圈比對,如果相同位置下, version1數字比version2大就表示 version1 > version2,如果到迴圈結束都比不出大小,兩個版號相等。

其實這題也可以用純字串來解,速度會快很多,不過因為寫這題的時候我才剛接觸leetcode沒多久,覺得用陣列解會比較清楚。

解題

/**
 * @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;
};

results matching ""

    No results matching ""