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++;
while (j < version2.length() && version2.charAt(j) != '.') { v2 = v2 * 10 + (version2.charAt(j++) - '0'); } j++;
if (v1 != v2) { return v1 > v2 ? 1 : -1; } }
return 0; } }
|
References
165. Compare Version Numbers