[LeetCode]Compare Version Numbers

本文介绍了一种用于比较两个版本号大小的方法。通过将版本号字符串按'.'分割成数组,并逐一比较各部分数字来判断版本的先后。文章还讨论了处理特殊情况的方法,如不同长度的版本号之间的比较。

Question
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


本题难度Easy。

split

【前提】
You may assume that the version strings are non-empty and contain only digits and the . character.

【复杂度】
时间 O(N) 空间 O(N)

【思路】
利用split函数对版本号按照"."进行分割,然后依次比较。

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

  1. 1.01是一个版本,意味即使长度不一样,也要检查后面是否都是0
  2. 1.15要大于1.5,因为前者是第15个子版本,而后者是第5个


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

【代码】

public class Solution {
    public int compareVersion(String version1, String version2) {
        //require
        String[] nums1=version1.split("\\."),nums2=version2.split("\\.");
        //invariant
        for(int i=0;i<Math.min(nums1.length,nums2.length);i++){
            int a=Integer.parseInt(nums1[i]),b=Integer.parseInt(nums2[i]);
            if(a>b)return 1;
            else if(a<b)return -1;
        }
        //在剩余的数字里面看有没有非0
        if(nums1.length>nums2.length){
            for(int i=nums2.length;i<nums1.length;i++)
                if(Integer.parseInt(nums1[i])!=0)return 1;
        }else if(nums1.length<nums2.length){
            for(int i=nums1.length;i<nums2.length;i++)
                if(Integer.parseInt(nums2[i])!=0)return -1;
        }
        //ensure
        return 0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值