Day 13 - LeetCode 165. Compare Version Numbers

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

想法

版本號是由數字+ '.' 組成, 可以用陣列切割, 再取兩個陣列最大長度跑回圈, 轉正整數做比較

詳細參閱


Code

var compareVersion = function(version1, version2) {

    let version1_array = version1.split('.');
    let version2_array = version2.split('.');
    let version1_len = version1_array.length;
    let version2_len = version2_array.length;
    let len_max = Math.max(version1_len, version2_len);

    for (let i = 0; i < len_max; i++) {
        //符合 !version1_array[i] 就是比較短的字串, 直接補0
        let version1_int = !version1_array[i] ? 0 : parseInt(version1_array[i]);
        let version2_int = !version2_array[i] ? 0 : parseInt(version2_array[i]);

        if (version1_int > version2_int) {
            return 1;
        }else if (version1_int < version2_int) {
            return -1;
        }
    }
    return 0;
};

compareVersion('1', '0');//1
compareVersion('1.1', '1.2');//-1
compareVersion('2.1', '1.0');//1
compareVersion('3.2', '3.2');//0
compareVersion('10.2.1', '10.2');//1

Run

Your input
"1", "0"
"1.1", "1.2"
"2.1", "1.0"
"3.2", "3.2"

Your answer
1
-1
1
0

Expected answer
1
-1
1
0

Runtime: 99 ms

留言