zoukankan      html  css  js  c++  java
  • leetcode:Compare Version Numbers

    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

    分析:题意为 比较两个版本数字version1和version2,值得注意的是.并不是代表小数点,例如:2.5表示第二个一级第五个二级版本

    思路:可以进行逐位比较,把字符串转化成整型。

    注意考虑test case:0.1 与 0.01  结果是:0.1>0.01

    代码如下:
    class Solution {
      public:
          int compareVersion(string version1, string version2) {
             int v1, v2;
              int t1 = 0, t2 = 0;
              while (t1 < version1.length() || t2 < version2.length()) {
                  v1 = 0; 
                  while (t1 < version1.length()) {
                      if (version1[t1] == '.') {
                         ++t1;
                         break;
                     }
                     v1 = v1 * 10 + (version1[t1] - '0');
                     ++t1;
                 }
                 v2 = 0; 
                 while (t2 < version2.length()) {
                     if (version2[t2] == '.') {
                         ++t2;
                         break;
                     }
                     v2 = v2 * 10 + (version2[t2] - '0');
                     ++t2;
                }
                 if (v1 > v2) return 1;
                 if (v1 < v2) return -1;
             }
             return 0;
         }
     };
    

     其他解法:

    class Solution {
      public:
          int compareVersion(string version1, string version2) {
            const char *p1 = version1.c_str()-1;
            const char *p2 = version2.c_str()-1;
            do{
                int v1 = 0, v2 =0;
                if (p1){
                    v1=atoi(p1+1);
                    p1 = strchr(p1+1, '.');
                }
                if (p2){
                    v2=atoi(p2+1);
                    p2 = strchr(p2+1, '.');
                }
                if (v1<v2) return -1;
                if (v2<v1) return 1;
            }while(p1||p2);
            return 0;
        }
     };
    

     或:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int n = version1.size(), m = version2.size();
            for (int i = 0, j = 0; i < n || j < m; i++, j++) {
                size_t p = 0;
                int a = ((i >= n) ? 0 : stoi(version1.substr(i), &p));
                i += p;
                int b = ((j >= m) ? 0 : stoi(version2.substr(j), &p));
                j += p;
                if (a > b) return 1;
                if (a < b) return -1;
            }
            return 0;
        }
    };
    

      或:

    class Solution {
      public:
    int compareVersion(string version1, string version2) {
        istringstream iss1(version1), iss2(version2);
        string token1, token2;
    
        while(!iss1.eof() || !iss2.eof()) {
            getline(iss1, token1, '.'); getline(iss2, token2, '.');
    
            if(stoi(token1) > stoi(token2)) return 1;
            if(stoi(token1) < stoi(token2)) return -1;
    
            token1 = token2 = "0";
        }
    
        return 0;
    }
    };
    

      

     

  • 相关阅读:
    python
    C++的socket编程学习
    GooglePlay
    GooglePlay
    Admob
    cocos2dx
    cocos2dx
    cocos2dx
    cocos2dx
    浅谈白鹭Egret
  • 原文地址:https://www.cnblogs.com/carsonzhu/p/4703268.html
Copyright © 2011-2022 走看看