165. Compare Version Numbers
Description
Given two version strings, version1
and version2
, compare them. A version string consists of revisions separated by dots '.'
. The value of the revision is its integer conversion ignoring leading zeros.
To compare version strings, compare their revision values in left-to-right order. If one of the version strings has fewer revisions, treat the missing revision values as 0
.
Return the following:
- If
version1 < version2
, return -1. - If
version1 > version2
, return 1. - Otherwise, return 0.
Example 1:
Input: version1 = "1.2", version2 = "1.10"
Output: -1
Explanation:
version1's second revision is "2" and version2's second revision is "10": 2 < 10, so version1 < version2.
Example 2:
Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation:
Ignoring leading zeroes, both "01" and "001" represent the same integer "1".
Example 3:
Input: version1 = "1.0", version2 = "1.0.0.0"
Output: 0
Explanation:
version1 has less revisions, which means every missing revision are treated as "0".
Constraints:
1 <= version1.length, version2.length <= 500
version1
andversion2
only contain digits and'.'
.version1
andversion2
are valid version numbers.- All the given revisions in
version1
andversion2
can be stored in a 32-bit integer.
Solutions
Solution: Two Pointers
- Time complexity: O(n)
- Space complexity: O(n)
JavaScript
/**
* @param {string} version1
* @param {string} version2
* @return {number}
*/
const compareVersion = function (version1, version2) {
const nums1 = version1.split('.');
const nums2 = version2.split('.');
const n = Math.max(nums1.length, nums2.length);
for (let index = 0; index < n; index++) {
const num1 = nums1[index] ? Number(nums1[index]) : 0;
const num2 = nums2[index] ? Number(nums2[index]) : 0;
if (num1 < num2) return -1;
if (num1 > num2) return 1;
}
return 0;
};