美文网首页
比较版本号

比较版本号

作者: WAI_f | 来源:发表于2020-07-28 23:49 被阅读0次

题目:

比较两个版本号 version1 和 version2。
如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回 0。
你可以假设版本字符串非空,并且只包含数字和 . 字符。
. 字符不代表小数点,而是用于分隔数字序列。
例如,2.5 不是“两个半”,也不是“差一半到三”,而是第二版中的第五个小版本。
你可以假设版本号的每一级的默认修订版号为 0。例如,版本号 3.4 的第一级(大版本)和第二级(小版本)修订号分别为 3 和 4。其第三级和第四级修订号均为 0。

示例:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,“01” 和 “001” 表示相同的数字 “1”。

解题方法:

这道题其实比想象中的要简单,主要原因是版本号的前导0是不影响版本号大小比较。
处理流程就是:

  • 将版本号分割,并转成数字;
  • 按照顺序比较相同位置的两个数组;

代码和结果:

class Solution {
public:
    void split(string s,vector<int> &n)
    {
        string t="";
        for(int i=0;i<s.size();i++)
        {
            if(s[i]!='.')
            {
                t.push_back(s[i]);
            }
            else
            {
                n.push_back(atoi(t.c_str()));
                t="";
            }
        }
        if(!t.empty()) n.push_back(atoi(t.c_str()));
    }
    int compareVersion(string version1, string version2) {
        vector<int> n1,n2;
        split(version1,n1);
        split(version2,n2);
        int sz1=n1.size();
        int sz2=n2.size();
        int mxz=sz1<sz2?sz2:sz1;
        int k1,k2;
        for(int i=0;i<mxz;i++)
        {
            if(i>=sz1) k1=0;
            else k1=n1[i];
            if(i>=sz2) k2=0;
            else k2=n2[i];
            if(k1>k2)   return 1;
            else if(k1<k2) return -1;
            else continue;
        }
        return 0;
    }
};
运行结果:

原题链接:https://leetcode-cn.com/problems/compare-version-numbers/

相关文章

网友评论

      本文标题:比较版本号

      本文链接:https://www.haomeiwen.com/subject/ejjcrktx.html