• [LeetCode] 165. Compare Version Numbers


    Medimu

    Compare two version numbers version1 and version2.
    If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0.

    You may assume that the version strings are non-empty and contain only digits and the . character.

    The . character does not represent a decimal point and is used to separate number sequences.

    For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

    You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4 has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

    Example 1:

    Input: version1 = "0.1", version2 = "1.1"
    Output: -1

    Example 2:

    Input: version1 = "1.0.1", version2 = "1"
    Output: 1

    Example 3:

    Input: version1 = "7.5.2.4", version2 = "7.5.3"
    Output: -1

    Example 4:

    Input: version1 = "1.01", version2 = "1.001"
    Output: 0
    Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”

    Example 5:

    Input: version1 = "1.0", version2 = "1.0.0"
    Output: 0
    Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"

    Note:

    1. Version strings are composed of numeric strings separated by dots . and this numeric strings may have leading zeroes.
    2. Version strings do not start or end with dots, and they will not be two consecutive dots.

    题目大意:比较两个版本号的大小,如果version1>version2返回1,如果version1<version2返回-1,否则返回0.

    方法:

    依次比较以点间隔的各段的数字大小。这道题的难点在于版本号的长度可能不相等,假如version1=1.0.0.1,version2=1.0,那么version1和version2重合的部分相同,但是多出来的部分还要继续遍历查看是否为0,如果不为零则version1较大,否则version1和version2相等。因此这里选择给较短的version号补零以达到两个version号长度相等,然后从头开始依次比较各段的数字大小,数字大的version大。

    代码如下:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            string v1 = version1, v2 = version2;
            while (v1 != "0" || v2 != "0") {
                int n1 = stoi(v1.substr(0, v1.find(".")));
                int n2 = stoi(v2.substr(0, v2.find(".")));
                if (n1 > n2)return 1;
                else if (n1 < n2)return -1;
                if (v1.find(".") == v1.npos) {
                    v1 += ".0";
                }
                if(v2.find(".") == v2.npos){
                    v2 += ".0";
                }
                v1 = v1.substr(v1.find(".") + 1);
                v2 = v2.substr(v2.find(".") + 1);
            }
            return 0;
        }
    };
  • 相关阅读:
    You Don't Know JS: Async & Performance(第2章,Callbacks)
    You Don't Know JS: this & Object Prototypes (第6章 Behavior Delegation)附加的ES6 class未读
    C#抓取网页内容
    输出jq对象
    ASP.NET MVC 常用内置验证特性
    MVC不错的学习资料
    让Entity Framework启动不再效验__MigrationHistory表
    多线程
    递归
    序列化
  • 原文地址:https://www.cnblogs.com/cff2121/p/11797622.html
Copyright © 2020-2023  润新知