165. Compare Version Numbers

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
    }

 

以上是关于165. Compare Version Numbers的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 165. Compare Version Numbers

[LC] 165. Compare Version Numbers

Leetcode 165. Compare Version Numbers

165. Compare Version Numbers - LeetCode

165. Compare Version Numbers (String)

165. Compare Version Numbers