LeetCode 165. Compare Version Numbers

来源:互联网 发布:锦尚中国的源码怎么样 编辑:程序博客网 时间:2024/05/17 17:15

  • 题目
  • 题意
  • 分析
  • 代码

题目

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

题意

这道题的大意是分析版本号大小,比如 2.5 指的是主版本为2,次版本为5的版本号。所以:

0.1 < 1.1 < 1.2 < 13.37

输入两个版本号,
如果version1 > version2 ,则返回 1
如果 version1 < version2 ,返回 -1
否则,返回 0。


分析

一开始看到这道题的时候,以为是简单的小数的大小比较,后来发现,不是这样简单的,要考虑还是比较多的,比如:

  1. 以0开头,比如 011,应 return 0
  2. 以0结尾,比如1.101.2,应 return 1
  3. 多个点,比如0.10.0.1,应 return 1

所以最好的做法是,按照点 “.” 分开每一级的数,同等级进行比较。
比如,12.01.03.4 和 12.01.08。
首先把两个version按照点拆开,分别进行比较

    12    ->      12          相等    1     ->      1           相等    3     ->      8           小于(直接return)    4     ->      空          

其实也不需要把每个点隔开的数字都先算出来,如上面的例子,在第三级就可以直接得到答案了,不需要再计算第四级的版本。


代码

int compareVersion(string version1, string version2) {    int i=0, j=0, len1 = version1.size(), len2 = version2.size(), num1 = 0, num2 = 0;    while(i<len1||j<len2){        while(i<len1 && version1[i]!='.')            num1 = num1*10 + version1[i++]-'0';        while(j<len2 && version2[j]!='.')            num2 = num2*10 + version2[j++]-'0';        if(num1>num2)            return 1;        else if(num1<num2)            return -1;        num1 = num2 = 0;        i++;        j++;    }    return 0;}
71 / 71 test cases passed.Runtime: 0 ms
0 0
原创粉丝点击