Compare two version numbers version1 and version1.
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 {
static final double EPS = 0.0000001;
static final String POINT = ".";
public int compareVersion(String version1, String version2) {
int from1 = 0;
int from2 = 0;
int end1 = 0;
int end2 = 0;
do{
end1 = version1.indexOf(POINT, from1);
end2 = version2.indexOf(POINT, from2);
if(end1 == -1){
end1 = version1.length();
}
if(end2 == -1){
end2 = version2.length();
}
int n1 = Integer.valueOf(version1.substring(from1, end1));
int n2 = Integer.valueOf(version2.substring(from2, end2));
if(n1 != n2) return n1 > n2 ? 1 : -1;
from1 = end1 + 1;
from2 = end2 + 1;
}while(from1 != 0 && from2 != 0 && from1 < version1.length() && from2 < version2.length());
if(from1 < version1.length()){
do {
end1 = version1.indexOf(POINT, from1);
if(end1 == -1)end1 = version1.length();
int n1 = Integer.valueOf(version1.substring(from1, end1));
if(n1 > 0) return 1;
from1 = end1 + 1;
}while(from1 < version1.length());
}
else if(from2 < version2.length()){
do{
end2 = version2.indexOf(POINT, from2);
if(end2 == -1) end2 = version2.length();
int n2 = Integer.valueOf(version2.substring(from2, end2));
if(n2 > 0) return -1;
from2 = end2 + 1;
}while(from2 < version2.length());
}
return 0;
}
}