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
The idea is simple:
Code:
public class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = ("1.1." + version1).split("\\.");
String[] v2 = ("1.1." + version2).split("\\.");
int i = 0;
while(i < v1.length && i < v2.length){
int i1 = Integer.parseInt(v1[i]);
int i2 = Integer.parseInt(v2[i]);
if(i1 > i2){
return 1;
} else if(i1 < i2){
return -1;
} else{
i++;
}
}
while(i < v1.length){
if(Integer.parseInt(v1[i]) != 0){
return 1;
}
i++;
}
while(i < v2.length){
if(Integer.parseInt(v2[i]) != 0){
return- 1;
}
i++;
}
return 0;
}
}
This Question is Simple, but still something need to remember:
1. Java Split a String , should path a regex, not a String, if split(".") it will return an empty array.
2. for those questions that v1 and v2 has different length, like this question or add two String, there are 2 solutions.
a. use three while loop like this.
b. use one while loop, and in the while loop make additional judgement, if index exceeds the boundary give it a default value. Like the code below from https://discuss.leetcode.com/topic/6238/accepted-small-java-solution/2
public int compareVersion(String version1, String version2) {
String[] levels1 = version1.split("\\.");
String[] levels2 = version2.split("\\.");
int length = Math.max(levels1.length, levels2.length);
for (int i=0; i<length; i++) {
Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0;
Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0;
int compare = v1.compareTo(v2);
if (compare != 0) {
return compare;
}
}
return 0;
}