## Algorithm

Problem Name: 165. Compare Version Numbers

Given two version numbers, `version1` and `version2`, compare them.

Version numbers consist of one or more revisions joined by a dot `'.'`. Each revision consists of digits and may contain leading zeros. Every revision contains at least one character. Revisions are 0-indexed from left to right, with the leftmost revision being revision 0, the next revision being revision 1, and so on. For example `2.5.33` and `0.1` are valid version numbers.

To compare version numbers, compare their revisions in left-to-right order. Revisions are compared using their integer value ignoring any leading zeros. This means that revisions `1` and `001` are considered equal. If a version number does not specify a revision at an index, then treat the revision as `0`. For example, version `1.0` is less than version `1.1` because their revision 0s are the same, but their revision 1s are `0` and `1` respectively, and `0 < 1`.

Return the following:

• If `version1 < version2`, return `-1`.
• If `version1 > version2`, return `1`.
• Otherwise, return `0`.

Example 1:

```Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both "01" and "001" represent the same integer "1".
```

Example 2:

```Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: version1 does not specify revision 2, which means it is treated as "0".
```

Example 3:

```Input: version1 = "0.1", version2 = "1.1"
Output: -1
Explanation: version1's revision 0 is "0", while version2's revision 0 is "1". 0 < 1, so version1 < version2.
```

Constraints:

• `1 <= version1.length, version2.length <= 500`
• `version1` and `version2` only contain digits and `'.'`.
• `version1` and `version2` are valid version numbers.
• All the given revisions in `version1` and `version2` can be stored in a 32-bit integer.

## Code Examples

### #1 Code Example with C Programming

```Code - C Programming```

``````
int compareVersion(char* version1, char* version2) {
int a, b;
char *v1, *v2;
while (version1 || version2) {
if (version1) {
v1 = version1;
version1 = strchr(version1, '.');
if (version1) {
*version1 = 0;
version1 ++;
}
a = atoi(v1);
} else {
a = 0;
}
if (version2) {
v2 = version2;
version2 = strchr(version2, '.');
if (version2) {
*version2 = 0;
version2 ++;
}
b = atoi(v2);
} else {
b = 0;
}
if (a > b) return 1;
if (a < b) return -1;
}

return 0;
}
``````
Copy The Code &

Input

cmd
version1 = "1.01", version2 = "1.001"

### #2 Code Example with Java Programming

```Code - Java Programming```

``````
class Solution {
public int compareVersion(String version1, String version2) {
String[] splitOne = version1.split("\\.");
String[] splitTwo = version2.split("\\.");
int i = 0;
for (i = 0; i < Math.min(splitOne.length, splitTwo.length); i++) {
int diff = Integer.parseInt(splitOne[i]) - Integer.parseInt(splitTwo[i]);
if (diff == 0) {
continue;
}
return diff < 0 ? -1 : 1;
}
while (i < splitOne.length) {
if (Integer.parseInt(splitOne[i++]) > 0) {
return 1;
}
}
while (i < splitTwo.length) {
if (Integer.parseInt(splitTwo[i++]) > 0) {
return -1;
}
}
return 0;
}
}
``````
Copy The Code &

Input

cmd
version1 = "1.01", version2 = "1.001"

### #3 Code Example with Javascript Programming

```Code - Javascript Programming```

``start coding...``
Copy The Code &

Input

cmd
version1 = "1.0", version2 = "1.0.0"

### #4 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def compareVersion(self, version1, version2):
def getNum(s):
if not s: return (None, None)
for i in range(len(s)):
if s[i] == ".": return (s[i + 1:], int(s[:i]))
return (None, int(s))
while True:
version1, n1 = getNum(version1)
version2, n2 = getNum(version2)
if version1 == version2 == n1 == n2 == None: return 0
if n1 != None and n1 > 0 and (n2 == None or n1 > n2): return 1
if n2 != None and n2 > 0 and (n1 == None or n2 > n1): return -1
``````
Copy The Code &

Input

cmd
version1 = "1.0", version2 = "1.0.0"

### #5 Code Example with C# Programming

```Code - C# Programming```

``````
using System;

namespace LeetCode
{
public class _0165_CompareVersionNumbers
{
public int CompareVersion(string version1, string version2)
{
var nums1 = version1.Split(new char[] { '.' });
var nums2 = version2.Split(new char[] { '.' });

var length1 = nums1.Length;
var length2 = nums2.Length;

for (int i = 0; i < Math.Max(length1, length2); i++)
{
var current1 = i < length1 ? int.Parse(nums1[i]) : 0;
var current2 = i < length2 ? int.Parse(nums2[i]) : 0;
if (current1 != current2)
return current1 > current2 ? 1 : -1;
}

return 0;
}
}
}
``````
Copy The Code &

Input

cmd
version1 = "0.1", version2 = "1.1"

Output

cmd
-1