zoukankan      html  css  js  c++  java
  • Compare Version Numbers(STRING-TYPE CONVERTION)

    QUESTION

    Compare two version numbers version1 and version1.
    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
    1ST TRY

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int integer1 = 0;
            int integer2 = 0;
            int i1 = 0;
            int i2 = 0;
            
            while(i1 < version1.length())
            {
                integer1 = 10*integer1 + version1[i1++] - '0';
                if(version1[i1] == '.') 
                {
                    i1++;
                    break;
                }
            }
            while(i2 < version2.length())
            {
                integer2 = 10*integer2 + version2[i2++] - '0';
                if(version2[i2] == '.') 
                {
                    i2++;
                    break;
                }
            }
            if(integer1 > integer2) return 1;
            else if(integer1 < integer2) return -1;
            
            integer1 = 0;
            integer2 = 0;
            while(i1 < version1.length())
            {
                integer1 = 10*integer1 + version1[i1++] - '0';
            }
            while(i2 < version2.length())
            {
                integer2 = 10*integer2 + version2[i2++] - '0';
            }
            if(integer1 > integer2) return 1;
            else if(integer1 < integer2) return -1;
            else return 0;
        }
    };

    Result: Wrong

    Input: "1.1", "1.01.0"
    Output: -1
    Expected: 0

    2ND TRY

    考虑有不只一个小数点的情况

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int integer1 = 0;
            int integer2 = 0;
            int i1 = 0;
            int i2 = 0;
            
            while(i1 < version1.length() || i2 < version2.length())
            {
                while(i1 < version1.length())
                {
                    integer1 = 10*integer1 + version1[i1++] - '0';
                    if(version1[i1] == '.') 
                    {
                        i1++;
                        break;
                    }
                }
                while(i2 < version2.length())
                {
                    integer2 = 10*integer2 + version2[i2++] - '0';
                    if(version2[i2] == '.') 
                    {
                        i2++;
                        break;
                    }
                }
                if(integer1 > integer2) return 1;
                else if(integer1 < integer2) return -1;
                
                integer1 = 0;
                integer2 = 0;
            }
            return 0;
        }
    };

    Result: Accepted

  • 相关阅读:
    Django中自定义标签的所有步骤
    django的settings详解(1)
    django中@property装饰器的运用
    设计没有标准,只有目标
    小学的题 大学的解法
    中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动圆满结束
    中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
    开源软件技巧与精髓分享
    博文视点大讲堂28期:助你赢在软件外包行业
    网络营销大师力作,亚马逊营销图书传奇
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4170656.html
Copyright © 2011-2022 走看看