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.37Credits: Special thanks to @ts for adding this problem and creating all test cases.
public class Solution { public int compareVersion(String version1, String version2) { String[] version1Arr = version1.split("\\."); String[] version2Arr = version2.split("\\."); int i = 0, j = 0; while (i < version1Arr.length && j < version2Arr.length) { if (strToInt(version1Arr[i]) > strToInt(version2Arr[j])) return 1; if (strToInt(version1Arr[i]) < strToInt(version2Arr[j])) return -1; i++; j++; } while (i < version1Arr.length) { if (strToInt(version1Arr[i]) != 0) { return 1; } i++; } while (j < version2Arr.length) { if (strToInt(version2Arr[j]) != 0) { return -1; } j++; } return 0; } public int strToInt(String s) { int sum = 0; for (int i = 0; i < s.length(); i++) { sum = sum * 10 + s.charAt(i) - '0'; } return sum; } }要考虑的情况很多,最开始我只考虑了1.2和1.3这种啊,其实还有1.2.2.3.3.3.2.1这种,然后我就考虑如果没比较完的为0那就结束了,不过后来又出错了,接着有1.2.3.0.0.2.3.4。哈哈哈哈,所以只能用while把i,j中没遍历完的接着遍历完。最后我以为完美了,我用的equals(“0”)这样的,不过出现1.2.3.00.0.00000.2.3。醉了,所以又只能用strToInt转换成整型比。
这里可能大多数人碰到split(“.”)这个不能切分问题,详情看我另外一篇博客Java中split以·点分割的问题。
