[leetcode] 165.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
题意:
给定两个版本号,比较版本号的大小。版本号只由数字跟’.’符号组成。比如0.1 < 1.1 < 1.2 < 13.37
‘.’不是小数点,是用来区分每个子版本的,比如0.1代表的是第一层版本号是0,第二层版本号是1。
思路:
这道题其实就是按照’.’将版本号的每一层的数字提取出来,然后进行每一层的比较。有没有觉得很耳熟,其实这种比较就是字典比较。对两个vector进行比较就是采取的字典比较的方法。字符串转化为数字可以采用atoi来完成,它可以帮助你忽略多余的0,比如001其实就是1。但是需要注意的是比如1与1.0,其实这两个版本号是一样大的,不过由于装到vector中是{1}以及{1,0},vector的字典比较,当前面的元素都一样时,如果有个vector已经到了最末,那么无论另一个vector中是什么数据,更长的那个vector的值都更大,所以会出现{1}比{1,0}小的情况。采取的方法可以使用补齐的方式,即在短的那个vector后面补上一定数量的0,使得两个vector一样长。
以上。
代码如下:

class Solution {
public:
    int compareVersion(string version1, string version2) {
        vector<int> v1, v2;
        int dot11 = -1, dot12 = -1;
        int dot21 = -1, dot22 = -1;
        int len1 = version1.length();
        int len2 = version2.length();
        while(dot12 <= len1)
        {
            if(dot12 == len1 || version1[dot12] == '.')
            {
                v1.push_back(atoi(version1.substr(dot11 + 1, dot12 - dot11 - 1).c_str()));
                dot11 = dot12;
            }
            dot12++;
        }

        while(dot22 <= len2)
        {
            if(dot22 == len2 || version2[dot22] == '.')
            {
                v2.push_back(atoi(version2.substr(dot21 + 1, dot22 - dot21 - 1).c_str()));
                dot21 = dot22;
            }
            dot22++;
        }
        int s1 = v1.size(), s2 = v2.size();
        if(s1 < s2)
        {
            v1.insert(v1.end(), s2 - s1, 0);
        }
        else if(s2 < s1)
        {
            v2.insert(v2.end(), s1 - s2, 0);
        }
        int result = 0;
        if(v1 > v2)result = 1;
        else if(v1 < v2)result =-1;
        return result;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值