资讯专栏INFORMATION COLUMN

[Leetcode] Compare Version Numbers 比较版本号

FrozenMap / 3493人阅读

摘要:注意因为方法输入的是一个正则表达式所以不能直接用,而是要用,而的要转义,所有要用代码按照进行分割比对相应的子串如果某个版本号更长,判断其多余部分是否是,如果不是,则较长的较大,否则是一样的。

Compare Version Numbers

Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character. The . character does not represent a decimal point and is used to separate number sequences. For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37
迭代法 复杂度

时间 O(N) 空间 O(N)

思路

这题的难点在于几个corner case:

1.01是一个版本,意味即使长度不一样,也要检查后面是否都是0

1.15要大于1.5,因为前者是第15个子版本,而后者是第5个

最简单的方法就是用split方法按照.分割,然后比对相应的每一个子串。

注意

因为split方法输入的是一个正则表达式所以不能直接用.,而是要用.,而java的要转义,所有要用.

代码
public class Solution {
    public int compareVersion(String version1, String version2) {
        // 按照.进行分割
        String[] v1 = version1.split(".");
        String[] v2 = version2.split(".");
        int i = 0;
        // 比对相应的子串
        for(; i < v1.length && i < v2.length; i++){
            int val1 = Integer.parseInt(v1[i]);
            int val2 = Integer.parseInt(v2[i]);
            if(val1 < val2) return -1;
            if(val1 > val2) return 1;
        }
        // 如果某个版本号更长,判断其多余部分是否是0,如果不是0,则较长的较大,否则是一样的。
        if(v2.length > v1.length){
            for(; i < v2.length; i++){
                int val = Integer.parseInt(v2[i]);
                if(val != 0) return -1;
            }
        } else if(v1.length > v2.length){
            for(; i < v1.length; i++){
                int val = Integer.parseInt(v1[i]);
                if(val != 0) return 1;
            }
        }
        return 0;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64593.html

相关文章

  • leetcode165. Compare Version Numbers

    摘要:题目要求也就是说,比较版本号。思路一利用通过方法将版本通过分隔开,然后将每一段版本从转化为进行比较思路二自己实现转化为自己实现将转化为,可以通过循环的方式。这是一个基本的算法。 题目要求 Compare two version numbers version1 and version2. If version1 > version2 return 1, if version1 < ve...

    Mike617 评论0 收藏0
  • [LeetCode] Compare Version Numbers

    摘要:首先找整数部分的坐标段,和都指向初值,令和一直向后遍历到小数点为止。然后用将的整数段转化为数值,进行比较若结果为大于或小于关系,直接返回结果若结果为相等,进行小数部分的比较。 Problem Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 < v...

    jzman 评论0 收藏0
  • [LeetCode] Compare Version Numbers

    Problem Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0. You may assume that the version strings are non-empty an...

    Alex 评论0 收藏0
  • [LeetCode] 165. Compare Version Numbers

    Problem Compare two version numbers version1 and version2.If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0. You may assume that the version strings are non-empty an...

    赵春朋 评论0 收藏0
  • Compare Version Numbers LC解题记录

    摘要:题目内容比较不同的版本号,并根据大小返回,或。并提醒版本意思是第二代的第五次升级,反正不是数字上的的意思。代码拆分两个字符串这里用最大的长度作为循环范围因为循环范围是最大长度,所以缺的位置补复杂度分析,和分别是两个字符串的长度。 题目内容 比较不同的版本号,并根据大小返回-1,1或0。并提醒2.5版本意思是第二代的第五次升级,反正不是数字上的2.5的意思。 解决思路 直观的想法是,找到...

    wanglu1209 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<