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;
};