165. Compare Version Numbers

一、题目

  1、审题

  

  2、分析

    给出两个非空的且只包含数字、点号的版本号,比较版本号的大小。

 

二、解答

  1、思路:

    方法一、

     ①、以 split 切割字符串成数组;按顺序对两个数组中字符串进行比较;

     ②、,短版本号的后边默认为 0,继续比较;

    public int compareVersion(String version1, String version2) {
        String[] arr1 = version1.split("\\.");    // 以 “.” 切割字符串
        String[] arr2 = version2.split("\\.");
        
        int length = Math.max(arr1.length, arr2.length);
        for (int i = 0; i < length; i++) {
            Integer v1 = i < arr1.length ? Integer.parseInt(arr1[i]) : 0;
            Integer v2 = i < arr2.length ? Integer.parseInt(arr2[i]) : 0;
            int compare = v1.compareTo(v2);
            if(compare != 0)
                return compare;
        }
        return 0;
    }

 

  方法二、

    ①、将每一个 “.” 分割成的数字字符串拼接成整数,按顺序对两个字符串进行比较;

    ②、短版本号的后边默认为 0;

    public int compareVersion(String version1, String version2) {
        Integer tmp1 = 0, tmp2 = 0;
        int len1 = version1.length(), len2 = version2.length();
        int i = 0, j = 0;
        
        while(i < len1 || j < len2) {
            tmp1 = 0;
            tmp2 = 0;
            while(i < len1 && version1.charAt(i) != '.') 
                tmp1 = tmp1 * 10 + (version1.charAt(i++) - '0');
            
            while(j < len2 && version2.charAt(j) != '.') 
                tmp2 = tmp2 * 10 + (version2.charAt(j++) - '0');
            
            int compare = tmp1.compareTo(tmp2);
            if(compare != 0)
                return compare;
            
            i++;    // 跳过 "."
            j++;
        }
        return 0;
    }

 

posted @ 2018-10-15 11:58  skillking2  阅读(182)  评论(0编辑  收藏  举报