題目描述:
比較兩個版本號 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。輸入有兩行,第一行表示version1,第二行表示version2。
你可以假設版本字符串非空,並且只包含數字和 . 字符。
. 字符不代表小數點,而是用於分隔數字序列。
例如,2.5 不是“兩個半”,也不是“差一半到三”,而是第二版中的第五個小版本。
你可以假設版本號的每一級的默認修訂版號爲 0。例如,版本號 3.4 的第一級(大版本)和第二級(小版本)修訂號分別爲 3 和 4。其第三級和第四級修訂號均爲 0。
輸入輸出示例:
示例 1:
輸入:
0.1
1.1
輸出: -1
示例 2:
輸入:
1.0.1
1
輸出: 1
示例 3:
輸入:
7.5.2.4
7.5.3
輸出: -1
示例 4:
輸入:
1.01
1.001
輸出:0
//解釋:忽略前導零,“01” 和 “001” 表示相同的數字 “1”。
示例 5:
輸入:
1.0
1.0.0
輸出:0
//解釋:version1 沒有第三級修訂號,這意味着它的第三級修訂號默認爲 “0”。
題解如下:
class Solution {
public int compareVersion(String version1, String version2) {
int[] arr1 = Split_Str(version1);
int[] arr2 = Split_Str(version2);
int minLen,maxLen;//分別存儲長度短的數組長度和長度長的數組長度
boolean isBig = true;//默認version1是長度較長的數組
//判斷數組長度大小,把長度分別存儲起來,並記錄誰是較長的數組
if(arr1.length>=arr2.length){
minLen = arr2.length;
maxLen = arr1.length;
isBig = true;
}else{
minLen = arr1.length;
maxLen = arr2.length;
isBig = false;
}
//判斷版本號大小
for(int i =0;i<minLen;i++){
if(arr1[i]<arr2[i])
return -1;
else if(arr1[i]>arr2[i])
return 1;
}
if(isBig){ //version1較長的話,判斷version1剩下的數據
for(int i = minLen ;i<maxLen;i++){
if (arr1[i]>0){
return 1;
}
}
}else{ //否則判斷version2剩下的數據
for(int i = minLen ;i<maxLen;i++){
if (arr2[i]>0){
return -1;
}
}
}
//前面均沒有比較出大小,那麼就只能是大小相等了
return 0;
}
//將版本號以 . 字符切割,存入int型數組,以便後面比較大小
public int[] Split_Str (String version){
String[] arr_str = version.split("\\.");
int[] arr = new int[arr_str.length];
for(int i = 0;i<arr.length;i++){
arr[i] = Integer.parseInt(arr_str[i].trim());
}
return arr;
}
}
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/compare-version-numbers
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。