1. 程式人生 > >LeetCode165——比較版本號

LeetCode165——比較版本號

我的LeetCode程式碼倉:https://github.com/617076674/LeetCode

原題連結:https://leetcode-cn.com/problems/compare-version-numbers/description/

題目描述:

知識點:字串

思路一:先分割再比較

時間複雜度是O(n),其中n為version1和version2中較長字串的長度。空間複雜度是O(m),其中m為version1和version2分割得到的數字的數量。

JAVA程式碼:

public class Solution {
    public int compareVersion(String version1, String version2) {
        ArrayList<Integer> arrayList1 = changeToArray(version1);
        ArrayList<Integer> arrayList2 = changeToArray(version2);
        for(int i = 0; i < arrayList1.size() || i < arrayList2.size(); i++){
            int num1 = 0, num2 = 0;
            if(i < arrayList1.size() && i < arrayList2.size()){
                num1 = arrayList1.get(i);
                num2 = arrayList2.get(i);
            }else if(i < arrayList1.size() && i >= arrayList2.size()){
                num1 = arrayList1.get(i);
            }else if(i >= arrayList1.size() && i < arrayList2.size()){
                num2 = arrayList2.get(i);
            }
            if(num1 > num2){
                return 1;
            }else if(num1 < num2){
                return -1;
            }
        }
        return 0;
    }
    private ArrayList<Integer> changeToArray(String version){
        ArrayList<Integer> arrayList = new ArrayList<>();
        String[] strings = version.split("\\.");
        for(String string : strings){
            arrayList.add(Integer.parseInt(string));
        }
        return arrayList;
    }
}

LeetCode解題報告:

思路二:邊分割邊比較

時間複雜度是O(n),其中n為version1和version2中較長字串的長度。空間複雜度是O(1)。

JAVA程式碼:

public class Solution {
    public int compareVersion(String version1, String version2) {
        int index1 = 0, index2 = 0;
        while(index1 < version1.length() || index2 < version2.length()){
            int num1 = 0, num2 = 0;
            if(index1 < version1.length() && index2 < version2.length()){
                num1 = getNextNum(version1, index1);
                num2 = getNextNum(version2, index2);
                int temp1 = version1.substring(index1).indexOf(".");
                if(temp1 != -1) {
                    index1 += temp1 + 1;
                }else{
                    index1 = version1.length();
                }
                int temp2 = version2.substring(index2).indexOf(".");
                if(temp2 != -1) {
                    index2 += temp2 + 1;
                }else{
                    index2 = version2.length();
                }
            }else if(index1 < version1.length() && index2 >= version2.length()){
                num1 = getNextNum(version1, index1);
                int temp1 = version1.substring(index1).indexOf(".");
                if(temp1 != -1) {
                    index1 += temp1 + 1;
                }else{
                    index1 = version1.length();
                }
            }else if(index1 >= version1.length() && index2 < version2.length()){
                num2 = getNextNum(version2, index2);
                int temp2 = version2.substring(index2).indexOf(".");
                if(temp2 != -1) {
                    index2 += temp2 + 1;
                }else{
                    index2 = version2.length();
                }
            }
            if(num1 > num2){
                return 1;
            }else if(num1 < num2){
                return -1;
            }
        }
        return 0;
    }
    private int getNextNum(String version, int index){
        if(version.substring(index).indexOf(".") == -1){
            return Integer.parseInt(version.substring(index));
        }
        return Integer.parseInt(version.substring(index, version.substring(index).indexOf(".") + index));
    }
}

LeetCode解題報告: