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.
class Solution(object):
def compareVersionInt(self, list1, list2):
if len(list1) == len(list2) == 0:
return 0
if len(list1) > 0 and len(list2) > 0:
if int(list1[0]) > int(list2[0]):
return 1
elif int(list1[0]) < int(list2[0]):
return -1
else:
return self.compareVersionInt(list1[1:], list2[1:])
if len(list1) > 0 and len(list2) == 0:
if int(list1[0]) > 0:
return 1
else:
return self.compareVersionInt(list1[1:], list2)
if len(list1) == 0 and len(list2) > 0:
if int(list2[0]) > 0:
return -1
else:
return self.compareVersionInt(list1, list2[1:])
def compareVersion(self, version1, version2):
"""
:type version1: str
:type version2: str
:rtype: int
"""
a1 = version1.split('.')
a2 = version2.split('.')
return self.compareVersionInt(a1, a2)
Java version: https://leetcode.com/discuss/79240/java-use-stringtokenizer
public int compareVersion(String v1, String v2) {
StringTokenizer st1 = new StringTokenizer(v1,".");
StringTokenizer st2 = new StringTokenizer(v2,".");
while(st1.hasMoreTokens() || st2.hasMoreTokens()){
int val1 = st1.hasMoreTokens() ? Integer.parseInt(st1.nextToken()) : 0;
int val2 = st2.hasMoreTokens() ? Integer.parseInt(st2.nextToken()) : 0;
if(val1 > val2)
return 1;
else if(val1 < val2)
return -1;
return 0;
}