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
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
public class Solution {
public int compareVersion(String version1, String version2) {
String[] version1Arr = version1.split("\\.");
String[] version2Arr = version2.split("\\.");
int i = 0, j = 0;
while (i < version1Arr.length && j < version2Arr.length) {
if (strToInt(version1Arr[i]) > strToInt(version2Arr[j]))
return 1;
if (strToInt(version1Arr[i]) < strToInt(version2Arr[j]))
return -1;
i++;
j++;
}
while (i < version1Arr.length) {
if (strToInt(version1Arr[i]) != 0) {
return 1;
}
i++;
}
while (j < version2Arr.length) {
if (strToInt(version2Arr[j]) != 0) {
return -1;
}
j++;
}
return 0;
}
public int strToInt(String s) {
int sum = 0;
for (int i = 0; i < s.length(); i++) {
sum = sum * 10 + s.charAt(i) - '0';
}
return sum;
}
}
要考虑的情况很多,最开始我只考虑了1.2和1.3这种啊,其实还有1.2.2.3.3.3.2.1这种,然后我就考虑如果没比较完的为0那就结束了,不过后来又出错了,接着有1.2.3.0.0.2.3.4。哈哈哈哈,所以只能用while把i,j中没遍历完的接着遍历完。最后我以为完美了,我用的equals(“0”)这样的,不过出现1.2.3.00.0.00000.2.3。醉了,所以又只能用strToInt转换成整型比。
这里可能大多数人碰到split(“.”)这个不能切分问题,详情看我另外一篇博客Java中split以·点分割的问题。