Skip to content

Latest commit

 

History

History
69 lines (55 loc) · 2.64 KB

165md.md

File metadata and controls

69 lines (55 loc) · 2.64 KB

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