BiruLyu
6/21/2017 - 6:07 AM

## 165. Compare Version Numbers.java

``````"""
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

"""
class Solution(object):
def compareVersion(self, version1, version2):
"""
:type version1: str
:type version2: str
:rtype: int
"""

versionList1 = version1.split('.');# split each version string by '.'
versionList2 = version2.split('.');

length1 = len(versionList1);
length2 = len(versionList2);
flag = 0;

for i in range(min(length1,length2)): # Compare the minimum length
flag = i;
if int(versionList1[i]) > int(versionList2[i]):
return 1;
elif int(versionList1[i]) < int(versionList2[i]):
return -1;

if flag == length1 - 1  and flag == length2 -1: # Scan the left part of version1 or version2
return 0;
elif flag == len(versionList1) - 1:
while(flag < length2 - 1):
flag += 1;
if int(versionList2[flag]) != 0:
return -1;
return 0;
elif flag == len(versionList2) -1 :
while(flag < length1 - 1):
flag += 1;
if int(versionList1[flag]) != 0:
return 1;
return 0;

``````
``````public class Solution {
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null) return -1;
int len1 = version1.length();
int len2 = version2.length();
int i = 0;
int j = 0;
while (i < len1 || j < len2) {
int num1 = 0;
int num2 = 0;
while (i < len1 && version1.charAt(i) >= '0' && version1.charAt(i) <= '9') {
num1 = num1 * 10 + version1.charAt(i++) - '0';
}
while (j < len2 && version2.charAt(j) >= '0' && version2.charAt(j) <= '9') {
num2 = num2 * 10 + version2.charAt(j++) - '0';
}
if (num1 < num2) return -1;
else if (num1 > num2) return 1;
i++;
j++;
}
return 0;
}
}``````