[LeetCode]--165. Compare Version Numbers

来源:互联网 发布:巴纳姆效应 知乎 编辑:程序博客网 时间:2024/05/21 09:13

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.37

Credits:
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以·点分割的问题。

0 0