牛客题霸 [比较版本号] C++题解/答案

题目描述

如果version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.

输入的version字符串非空,只包含数字和字符.。.字符不代表通常意义上的小数点,只是用来区分数字序列。例如字符串2.5并不代表二点五,只是代表版本是第一级版本号是2,第二级版本号是5.

题解:

将小数点之前的转化成数num1.如果num1一样,依次比小数点后面的

代码:

class Solution {
   
public:
    /** * 比较版本号 * @param version1 string字符串 * @param version2 string字符串 * @return int整型 */
    int compare(string version1, string version2) {
   
        // write code here
        int i = 0;   ///note version1
        int j = 0;   ///note version2
        int num1 = 0;
        int num2 = 0;
        while (i<version1.size() && j<version2.size())
        {
   
            char a = version1[i];
            char b = version2[j];
            if (a != '.')num1 = num1*10 + (a - '0');
            if (b != '.') num2 = num2*10 + (b - '0');
            if (a=='.' && b=='.')
            {
   
                if (num1 > num2)
                    return 1;
                else if (num1 < num2)
                    return -1;
                else
                {
   
                    num1 = 0;
                    num2 = 0;
                }
            }
            if (a!='.' && b=='.')
                i++;
            else if (a=='.' && b!='.')
                j++;
            else{
   
                i++;
                j++;
            }
        }
         
        if (i < version1.size())return 1;
        if (j < version2.size())
            return -1;
         
        return 0;
    }
};