• 165. 比较版本号


    165. 比较版本号

    给你两个版本号 version1version2 ,请你比较它们。

    版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.330.1 都是有效的版本号。

    比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 010 < 1

    返回规则如下:

    • 如果 version1 version2 返回 1
    • 如果 version1 version2 返回 -1
    • 除此之外返回 0

    示例 1:

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

    示例 2:

    输入:version1 = "1.0", version2 = "1.0.0"
    输出:0
    解释:version1 没有指定下标为 2 的修订号,即视为 "0"
    

    示例 3:

    输入:version1 = "0.1", version2 = "1.1"
    输出:-1
    解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2
    

    提示:

    • 1 <= version1.length, version2.length <= 500
    • version1version2 仅包含数字和 '.'
    • version1version2 都是 有效版本号
    • version1version2 的所有修订号都可以存储在 32 位整数

    解析:

    转成int,那其实就不用忽略前导零了

    无语

    class Solution {
    public:
        int transfer(string temp)
        {
            int ans = 0;
            for(int i = 0; i < temp.length(); i++)
            {
                int x = temp[i] - '0';
                ans *= 10;
                ans += x;
            }
            return ans;
        }
        void split(string version, vector<int>& ret)
        {
            string temp = "";
            int i = 0;
            while(i < version.length())
            {
                while(i < version.length() && version[i] == '0') i++;
                while(i < version.length() && version[i] != '.') temp += version[i], i++;
                if(temp != "") ret.push_back(transfer(temp));
                else ret.push_back(0);
                i++;
    
                temp = "";
            }
        }
    
        int compareVersion(string version1, string version2) {
            vector<int> v1, v2;
            split(version1, v1);
            split(version2, v2);
            int flag = 0;
            for(int i = 0; i < min(v1.size(), v2.size()); i++)
            {
                if(v1[i] > v2[i])
                {
                    flag = 1;
                    break;
                }
                else if(v1[i] < v2[i])
                {
                    flag = -1;
                    break;
                }
            }
            if(flag != 0) return flag;
            if(v1.size() == v2.size()) return 0;
            if(v1.size() > v2.size())
            {
                int flag1 = 0;
                for(int i = v2.size(); i < v1.size(); i++)
                {
                    if(v1[i] != 0)
                    {
                        flag1 = 1;
                        break;
                    }
                }
                return flag1;
            }
            else if(v2.size() > v1.size())
            {
                int flag1 = 0;
                for(int i = v1.size(); i < v2.size(); i++)
                {
                    if(v2[i] != 0)
                    {
                        flag1 = -1;
                        break;
                    }
                }
                return flag1;
            }
    
            return 1;
        }
    };
  • 相关阅读:
    201521123036 《Java程序设计》第1周学习总结
    201521123075 《Java程序设计》第2周学习总结
    201521123075 《Java程序设计》第1周学习总结
    201521123039 《java程序设计》第一周学习总结(新)
    201521123039 《java程序设计》第一周学习总结
    201521123084 《Java程序设计》第2周学习总结
    Problem
    第一周作业及第一周学习总结
    Hello
    201521123092《java程序设计》第八周学习总结
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/16729333.html
Copyright © 2020-2023  润新知