力扣165-比较版本号-c++

一、题目

题目较长,需要看题目请移步下方链接。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/compare-version-numbers

二、解题思路

代码写得有点长,但整体思路比较简单,首先分别将两个版本号按 '.' 进行切割成段,放入vector数组中,每一段为数组中的一项,然后只需要对两个数组进行逐项比较,按照题目要求的大小关系返回对应的值即可。

这里需要注意的是两个版本号的段数不一定相同,所以是先比较前面长度相同的段,若前面长度相同的段代表的值都相同,再看后面多出的段是否大于0即可。

三、代码

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int len1 = version1.size();
        int len2 = version2.size();
        int index1 =0, index2 = 0;
        vector<string> vs1;  //存放版版本号1 的每个分开部分
        vector<string> vs2;  //存放版本号2的每个分开部分
        while(index1 < len1 || index2 < len2){  //将两个版本号按'.'切割放到数组中
            int tmp1 = index1, tmp2 = index2;
            while(index1 < len1 && version1[index1] != '.'){
                index1++;
            }
            if(tmp1 < len1){
                vs1.push_back(version1.substr(tmp1, index1));
                index1++;
            }
            while(index2 < len2 && version2[index2] != '.'){
                index2++;
            }
            if(tmp2 < len2){
                vs2.push_back(version2.substr(tmp2, index2));
                index2++;
            }
        }
        len1 = vs1.size();
        len2 = vs2.size();
        index1 =0, index2 =0;
        while(index1 < len1 && index2 < len2){  //对切割好的版本号逐段进行比较
            int tmp1 = atoi(vs1[index1].c_str());  //将字符串型转换为整数型
            int tmp2 = atoi(vs2[index2].c_str());
            if(tmp1 > tmp2) return 1;
            if(tmp1 < tmp2) return -1;
            index1++;
            index2++;
        }
        while(index1 < len1){  //version1 的段数更多,且前面各段均和version相同,判断后面是否大于0
            int tmp1 = atoi(vs1[index1].c_str());
            if(tmp1 > 0) return 1;
            index1++;
        }
        while(index2 < len2){ //version1 的段数更多,且前面各段均和version相同,判断后面是否大于0
            int tmp2 = atoi(vs2[index2].c_str());
            if(tmp2 > 0) return -1;
            index2++;
        }
        return 0;
    }
};

四、运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值