[LeetCode]Compare Version Numbers

来源:互联网 发布:js 清除cookie 编辑:程序博客网 时间:2024/05/29 18:10

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;    }}
0 0
原创粉丝点击