leetCode 165. Compare Version Numbers

这里写图片描述
这道题是要我们比较两个版本号(就是那些软件的版本号)的大小。一开始我还奇怪这道题很简单怎么通过率这么低(17.7%)。做完之后我就知道我还是太年轻了= =

一开始我是直接用atof函数把string转成double进行比较,然后就死在1.1和1.10的比较上了,很明显1.10>1.1 但转成double之后就会有1.1 = 1.1…

于是我改成以‘.’为界,前面用一个int记录,后面用另一个int记录。然后比较。然后死在1.1.1 和1.1的比较上。哦买尬,居然还有更低的….
ps:这里用的转换函数是atoi。

然后我觉得用数组来记录版本号,那就无所谓有几个‘.’了。从前到后进行大小比较,如果当一个的数组比完了还没分出大小,那就看谁的数组长,更长的那个就更大。当我信心满满的提交时——1.1.0 和1.1的比较又出错了。纳尼?1.1.0是什么鬼? 我的代码判断1.1.0大于1.1,因为前面是一样的,但1.1.0的数组会比1.1的多一位,所以1.1.0>1.1,但其实应该是1.1.0 = 1.1.

所以我又改进了最后数组比长短那里,如果一个更长,还不能做判断,必须有多出来的数字不全为0才算数。这样终于AC了…

AC代码:

int compareVersion(string version1, string version2) {
    string a[1000],b[1000]; 
    int atemp = 0;
    for(int i = 0; i<version1.size();i++){
        if(version1[i]!='.')
            a[atemp]+=version1[i];
        else if(version1[i] == '.'){
            atemp++;
        }
    }

    int btemp = 0;
    for(int i = 0; i<version2.size();i++){
        if(version2[i]!='.')
            b[btemp]+=version2[i];
        else if(version2[i] == '.'){
            btemp++;
        }
    }

    int a_int[1000],b_int[1000]; 
    for(int i = 0;i < atemp+1;i++){
        a_int[i] = atoi(a[i].c_str());
    }
    for(int i = 0;i < btemp+1;i++){
        b_int[i] = atoi(b[i].c_str());
    }
    int len = atemp<btemp?atemp:btemp;
    for(int i =0;i < len+1;i++){
        if(a_int[i]>b_int[i])
            return 1;
        else if(a_int[i]<b_int[i])
            return -1;
        else
            continue;
    }


    if(atemp == btemp)
        return 0;
    else if(atemp>btemp){
        for(int i = btemp+1;i<atemp+1;i++){
            if(a_int[i] != 0)
                return 1;
        }
        return 0; 
    }
    else{
        for(int i = atemp+1;i<btemp+1;i++){
            if(b_int[i] != 0)
                return -1;
        }
        return 0;  
    }
}

顺便因为这道题学习了string转int的问题,我也写了一个博客:http://blog.csdn.net/Trident_/article/details/51569412

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值