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
Analysis:
We can split the string to be a string array and then compare them separately. During comparison, it may happen that the two arrays are not the same size. Then we need to go through the longest one and add 0 if one is less than the longest size.
Note: here split function using on . we can not use . directly, but use \\.
Time complexity: O(n)
Space complexity: O(n)
Code is below:
public class Solution { public int compareVersion(String version1, String version2) { // O(n) O(n) if (version1 == null || version2 == null) { return 0; } if (version1.equals(version2)) { return 0; } String[] v1 = version1.split("\\."); String[] v2 = version2.split("\\."); int maxLen = Math.max(v1.length, v2.length); for (int i = 0; i < maxLen; i++) { int num1 = i < v1.length ? Integer.parseInt(v1[i]) : 0; int num2 = i < v2.length ? Integer.parseInt(v2[i]) : 0; if (num1 < num2) { return -1; } if (num1 > num2) { return 1; } } return 0; } }