1. 程式人生 > >165. Compare Version Numbers

165. Compare Version Numbers

首先想到的解法是根據'.'分割出字串,然後求解。

由於忘了怎麼使用'.'去分割,所以自己寫了一個函式去轉換。

剛開始兩次提交分別出錯。

一個是沒有考慮1,0這種不帶'.'的,就是轉換函式寫錯了。:在轉換函式結尾處新增:list.add(Integer.parseInt(tempstr.toString()));

一個是沒有考慮:1.0.0.0和1.0這種是相等的;一種做法是在轉換函式裡出去末尾的0;另外一種是在比較時,字串短的自動補0q去比較。

程式碼1:在轉換函式裡出去末尾無效的0

class Solution {
    public int compareVersion(String version1, String version2) {
        List<Integer> str1=F(version1);
        List<Integer> str2=F(version2);
        int i=0,j=0;
        while(i<str1.size() && j<str2.size()){
            if(str1.get(i)==str2.get(j)){
                i++;
                j++;
            }else if(str1.get(i)>str2.get(j))
                return 1;
            else
                return -1;
        }
        if(str1.size()==str2.size())
            return 0;
        else if(str1.size()>str2.size())
            return 1;
        else
            return -1;
    }
    public static List<Integer> F(String str){
        char ch[]=str.toCharArray();
        List<Integer> list=new ArrayList<Integer>();
        StringBuffer  tempstr=new StringBuffer();
        for(int i=0;i<ch.length;i++){
            if(ch[i]=='.'){
                list.add(Integer.parseInt(tempstr.toString()));
                tempstr.delete(0,tempstr.length());
            }
            else
                tempstr.append(ch[i]);
        }
        list.add(Integer.parseInt(tempstr.toString()));
        int len=list.size()-1;
        for(int i=len;i>0;i--){
            if(list.get(i)==0)
                list.remove(i);
            else
                break;
        }
        return list;
    }
}

程式碼2:在長度較短的字串後自動補0

class Solution {
    public int compareVersion(String version1, String version2) {
        List<Integer> str1=F(version1);
        List<Integer> str2=F(version2);
        int i=0,j=0;
        while(i<str1.size() || j<str2.size()){
            int tempi=i<str1.size()?str1.get(i):0;
            int tempj=j<str2.size()?str2.get(j):0;
            if(tempi==tempj){
                i++;
                j++;
            }else if(tempi>tempj)
                return 1;
            else
                return -1;
        }
        return 0;
    }
    public static List<Integer> F(String str){
        char ch[]=str.toCharArray();
        List<Integer> list=new ArrayList<Integer>();
        StringBuffer  tempstr=new StringBuffer();
        for(int i=0;i<ch.length;i++){
            if(ch[i]=='.'){
                list.add(Integer.parseInt(tempstr.toString()));
                tempstr.delete(0,tempstr.length());
            }
            else
                tempstr.append(ch[i]);
        }
        list.add(Integer.parseInt(tempstr.toString()));
        return list;
    }
}

 程式碼3:利用split函式轉換,然後短字串自動補0.

class Solution {
    public int compareVersion(String version1, String version2) {
        String str1[]=version1.split("\\.");
        String str2[]=version2.split("\\.");
        int i=0,j=0;
        while(i<str1.length || j<str2.length){
            int tempi=i<str1.length?Integer.parseInt(str1[i]):0;
            int tempj=j<str2.length?Integer.parseInt(str2[j]):0;
            if(tempi==tempj){
                i++;
                j++;
            }else if(tempi>tempj)
                return 1;
            else
                return -1;
        }
        return 0;
    }
}