Leetcode - Compare Version Numbers

Leetcode - Compare Version Numbers_第1张图片

My code:

public class Solution {
    public int compareVersion(String version1, String version2) {
        int vBegin1 = 0;
        int vBegin2 = 0;
        while (vBegin1 < version1.length() && vBegin2 < version2.length()) {
            int i = vBegin1;
            for(; i < version1.length(); i++) {
                char temp = version1.charAt(i);
                if (temp == '.')
                    break;
            }
            int big1 = Integer.parseInt(version1.substring(vBegin1, i));
            if (i == version1.length())
                vBegin1 = i;
            else
                vBegin1 = i + 1;
            
            int j = vBegin2;
            for(; j < version2.length(); j++) {
                char temp = version2.charAt(j);
                if (temp == '.')
                    break;
            }
            int big2 = Integer.parseInt(version2.substring(vBegin2, j));
            if (j == version2.length())
                vBegin2 = j;
            else
                vBegin2 = j + 1;
            
            if (big1 > big2)
                return 1;
            else if (big1 < big2)
                return -1;
            else
                continue;
        }
        if (vBegin1 >= version1.length() && vBegin2 < version2.length()) {
            int j = vBegin2;
            for(; j < version2.length(); j++) {
                char temp = version2.charAt(j);
                if (temp == '.')
                    break;
            }
            int big2 = Integer.parseInt(version2.substring(vBegin2, j));
            if (big2 > 0)
                return -1;
            else
                return 0;
        }
        else if (vBegin1 < version1.length() && vBegin2 >= version2.length()) {
            int i = vBegin1;
            for(; i < version1.length(); i++) {
                char temp = version1.charAt(i);
                if (temp == '.')
                    break;
            }
            int big1 = Integer.parseInt(version1.substring(vBegin1, i));
            if (big1 > 0)
                return 1;
            else
                return 0;
        }
        else
            return 0;
    }

    public static void main(String[] args) {
        Solution test = new Solution();
        System.out.println(test.compareVersion("1.0", "1.1"));
    }
}

My test result:

Leetcode - Compare Version Numbers_第2张图片
Paste_Image.png

死B 变态题。没什么算法思想,就是不断地找"." 然后把之前的提取出来,比较。
然后在处理一些细节。

**
总结:String
Array 的 easy medium 免费的题目终于都刷完了,这周开始String 模式。
总结一些算法,和小伙伴开个讨论会。
**

Anyway, Good luck, Richardo!

My code:

public class Solution {
    public int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        if (v1.length == 0 && v2.length == 0) {
            return compare(version1, version2);
        }
        int i = 0;
        for (; i < Math.min(v1.length, v2.length); i++) {
            if (compare(v1[i], v2[i]) > 0) {
                return 1;
            }
            else if (compare(v1[i], v2[i]) < 0) {
                return -1;
            }
        }
        if (v1.length > v2.length) {
            for (; i < v1.length; i++) {
                if (compare(v1[i], "0") > 0) {
                    return 1;
                }
            }
            return 0;
        }
        else if (v1.length < v2.length) {
            for (; i < v2.length; i++) {
                if (compare(v2[i], "0") > 0) {
                    return -1;
                }
            }
            return 0;
        }
        else {
            return 0;
        }
    }
    
    private int compare(String s1, String s2) {
        int i1 = Integer.valueOf(s1);
        int i2 = Integer.valueOf(s2);
        if (i1 > i2) {
            return 1;
        }
        else if (i1 < i2) {
            return -1;
        }
        else {
            return 0;
        }
    }
    
    public static void main(String[] args) {
        Solution test = new Solution();
        int ret = test.compareVersion("1.0", "1.1");
        System.out.println(ret);
    }
}

自己做了出来。
主要考虑几点:
1 . 输入部分没有小数点,那么直接比较
2 . 比较函数得自己重写,有的时候会有 01 , 1比较
3 . 当一个数组提前结束的时候,更长的数组不一定更大,因为可能接下去的字符串都是 0,那么就得返回 0,所以得考虑这个情况。
4 . Java, String.split("."); 不能split "." , 得用 ("\."),不知道为什么

Anyway, Good luck, Richardo! -- 09/20/2016

你可能感兴趣的:(Leetcode - Compare Version Numbers)