【LeetCode題解】165. 比較版本號

比較兩個版本號 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。

你可以假設版本字符串非空,並且只包含數字和 . 字符。

 . 字符不代表小數點,而是用於分隔數字序列。

例如,2.5 不是“兩個半”,也不是“差一半到三”,而是第二版中的第五個小版本。

你可以假設版本號的每一級的默認修訂版號爲 0。例如,版本號 3.4 的第一級(大版本)和第二級(小版本)修訂號分別爲 3 和 4。其第三級和第四級修訂號均爲 0。

示例 1:輸入: version1 = "0.1", version2 = "1.1"
輸出: -1
示例 2:輸入: version1 = "1.0.1", version2 = "1"
輸出: 1
示例 3:輸入: version1 = "7.5.2.4", version2 = "7.5.3"
輸出: -1
示例 4:輸入:version1 = "1.01", version2 = "1.001"
輸出:0
解釋:忽略前導零,“01” 和 “001” 表示相同的數字 “1”。
示例 5:輸入:version1 = "1.0", version2 = "1.0.0"
輸出:0
解釋:version1 沒有第三級修訂號,這意味着它的第三級修訂號默認爲 “0”。
提示:

版本字符串由以點 (.) 分隔的數字字符串組成。這個數字字符串可能有前導零。
版本字符串不以點開始或結束,並且其中不會有兩個連續的點。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/compare-version-numbers
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

題解:

class Solution {
    public int compareVersion(String version1, String version2) {
        //每次取兩個.之間的數字比較版本
        StringBuilder s1 = new StringBuilder();
        StringBuilder s2 = new StringBuilder();
        //方便比較,首先給每個數字末尾加上"."  
        //這樣在取數就不需要判斷當前是否已經到達字符串尾部
        s1.append(version1);
        s1.append(".");
        s2.append(version2);
        s2.append(".");
        
        int start1 = 0, start2 = 0;
        int index1 = s1.indexOf(".");
        int index2 = s2.indexOf(".");
        while(index1!=-1 && index2!=-1){
            int num1 = Integer.parseInt(s1.substring(start1,index1));
            int num2 = Integer.parseInt(s2.substring(start2,index2));
            if(num1 != num2){
                return num1>num2?1:-1;
            }else{
                //迭代處理起點和截取段
                start1 = index1+1;
                index1 = s1.indexOf(".",index1+1);
                start2 = index2+1;
                index2 = s2.indexOf(".",index2+1);
            }
        }
        // System.out.println(index1 + " " +index2 +"  "+ s1 +"  "+ s2);
        if(index1 != -1 || index2 != -1){
           if(index1 == -1){
               //用last_start做起點開始檢測,簡化認爲出現非0非.則一定是非0數字
                for(int i=start2 ; i<s2.length() ; i++){
                    if(s2.charAt(i)!='.' && s2.charAt(i)!='0'){
                        return -1;
                    }
                }
            }else{
                for(int i=start1 ; i<s1.length() ; i++){
                    if(s1.charAt(i)!='.' && s1.charAt(i)!='0'){
                        return 1;
                    }
                }
            } 
        }
        return 0;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章