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

  • 相关阅读:
    推荐:负采样
    JNDI学习总结(一)——JNDI数据源的配置
    前端性能优化
    java中的引用类型概念
    java中的各种数据类型在内存中存储的方式
    POI导出EXCEL经典实现
    synchronized 与 Lock 的那点事
    黑马程序员_Map<K,V> 映射关系 Map.Entry
    Java ConcurrentModificationException异常问题
    表 (list)
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/4170656.html
Copyright © 2011-2022 走看看