165. Compare Version Numbers

Recursion

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public int compareVersion(String version1, String version2) {
int v1 = 0, v2 = 0;

int i1 = 0;
while (i1 < version1.length() && version1.charAt(i1) != '.') {
v1 = v1 * 10 + (version1.charAt(i1++) - '0');
}

int i2 = 0;
while (i2 < version2.length() && version2.charAt(i2) != '.') {
v2 = v2 * 10 + (version2.charAt(i2++) - '0');
}

int diff = v1 - v2;
if (diff < 0) {
return -1;
} else if (diff > 0) {
return 1;
} else {
if (i1 == version1.length() && i2 == version2.length()) {
return 0;
}

if (i1 == version1.length()) {
return compareVersion("0", version2.substring(i2 + 1));
} else if (i2 == version2.length()) {
return compareVersion(version1.substring(i1 + 1), "0");
}

return compareVersion(version1.substring(i1 + 1), version2.substring(i2 + 1));
}
}

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int compareVersion(String version1, String version2) {
int i = 0, j = 0;
while (i < version1.length() || j < version2.length()) {
int v1 = 0, v2 = 0;
while (i < version1.length() && version1.charAt(i) != '.') {
v1 = v1 * 10 + (version1.charAt(i++) - '0');
}
i++; // skip dot

while (j < version2.length() && version2.charAt(j) != '.') {
v2 = v2 * 10 + (version2.charAt(j++) - '0');
}
j++; // skip dot

if (v1 != v2) {
return v1 > v2 ? 1 : -1;
}
}

return 0;
}
}

References

165. Compare Version Numbers