• LeetCode 165.Compare Version Numbers


    165. Compare Version Numbers

     
     My Submissions
     
    • Total Accepted: 61127
    • Total Submissions: 333997
    • Difficulty: Easy

    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.

    Here is an example of version numbers ordering:

    0.1 < 1.1 < 1.2 < 13.37


    这个题目的难点在于其各种特殊情况,如000.0和0,返回值是0,001和1返回值也是0,10.1和10.1.0返回值也是0

    我解决的办法是找到.这个分界点如果比出来了就可以得到返回值,如果前面的值的大小是相同的,则递归调用,传递的参数是去除前面的相等的数据之后的字符串

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            
            size_t pos1 = 0, pos2 = 0;
            int num1 = 0, num2 = 0;
            if ((count(version1.cbegin(), version1.cend(), '0') + count(version1.cbegin(), version1.cend(), '.')) ==
                version1.length())
            {
                if (count(version2.cbegin(), version2.cend(), '0') + count(version2.cbegin(), version2.cend(), '.') ==
                    version2.length())
                    return 0;
                else return -1;
            }
            else
            {
                if (count(version2.cbegin(), version2.cend(), '0') + count(version2.cbegin(), version2.cend(), '.') ==
                    version2.length())
                    return 1;
                else
                {
                    pos1 = version1.find_first_not_of('0');
                    pos2 = version2.find_first_not_of('0');
                    version1 = version1.substr(pos1);
                    version2 = version2.substr(pos2);
                    if (version1 == version2)return 0;
                    pos1 = version1.find_first_of('.');
                    pos2 = version2.find_first_of('.');
                    if (pos1 != 0&&pos1!=string::npos)
                    num1 = stoi(version1.substr(0,pos1));
                    else if (pos1 == string::npos)
                    {
                        num1 = stoi(version1.substr(0));
                    }
                    else num1 = 0;
                    if(pos2!=0&&pos2!=string::npos)
                    num2 = stoi(version2.substr(0,pos2));
                    else if (pos2 == string::npos)
                    {
                        num2 = stoi(version2.substr(0));
                    }
                    else num2 = 0;
                    if (num1 == num2&&pos1 == string::npos&&pos2 == string::npos)return 0;
                    if (num1 == num2&&pos1 == string::npos)
                    {
                        version2 = version2.substr(pos2);
                        if ((count(version2.cbegin(), version2.cend(), '.') + count(version2.cbegin(), version2.cend(), '0')) == version2.length())
                            return 0;
                        else return -1;
                    }
                    if (num1 == num2&&pos2 == string::npos)
                    {
                        version1 = version1.substr(pos1);
                        if ((count(version1.cbegin(), version1.cend(), '.') + count(version1.cbegin(), version1.cend(), '0')) == version1.length())
                            return 0;
                        else return 1;
                    }
                    if (num1 == num2&&num1==0)return compareVersion(version1.substr(pos1+1), version2.substr(pos2+1));
                    if (num1 == num2&&num1 != 0)return compareVersion(version1.substr(pos1), version2.substr(pos2));
                    else
                    {
                        if (num1 > num2)return 1;
                        if (num1 < num2)return -1;
                    }
                }
            }
            return 0;
        }
    };
  • 相关阅读:
    经典多线程问题(四)-轮流打印字母和数字
    经典多线程问题 (一)-多线程售票
    买卖股票的最佳时机 II
    最长递增(严格递增)子序列-可以不连续
    环形链表 II
    最小栈
    买卖股票的最佳时机
    二叉树的层序遍历
    字符串相加
    最大子序和
  • 原文地址:https://www.cnblogs.com/csudanli/p/5744777.html
Copyright © 2020-2023  润新知