【LeetCode-面試演算法經典-Java實現】【165-Compare Version Numbers(比較版本號)】
阿新 • • 發佈:2019-01-11
原題
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
題目大意
給定兩個版本號,比較兩個版本號的大小。.
號作為分割符使用,版本號中只有數和.
號。
解題思路
以點號作為分割符,比較相應部分的大小。
程式碼實現
演算法實現類
public class Solution {
public int compareVersion(String version1, String version2) {
int indexA = 0; // 記錄version1處理的位置
int indexB = 0; // 記錄version2處理的位置
int countA = 0 ; // 記錄version1的.號之的字元數
int countB = 0; // 記錄version2的.號之的字元數
int max; // 記錄countA和countB之間的較大者
int a;
int b;
while (indexA < version1.length() || indexA < version2.length()) {
while (indexA < version1.length() && version1.charAt(indexA) != '.' ) {
countA++;
indexA++;
}
while (indexB < version2.length() && version2.charAt(indexB) != '.') {
countB++;
indexB++;
}
max = countA > countB ? countA : countB;
for (int i = max; i >= 1; i--) { // 從左向右比較
a = countA - i >= 0 ? version1.charAt(indexA - i) - '0' : 0;
b = countB - i >= 0 ? version2.charAt(indexB - i) - '0' : 0;
if (a > b) {
return 1;
} else if (a < b) {
return -1;
}
}
countA = 0;
countB = 0;
indexA++;
indexB++;
}
return 0;
}
}
評測結果
點選圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中檢視完整圖片。