zoukankan      html  css  js  c++  java
  • LeetCode Compare Version Numbers

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            vector<int> v1 = getVersionParts(version1);
            vector<int> v2 = getVersionParts(version2);
    
            int i = 0, j = 0;
            int len1 = v1.size();
            int len2 = v2.size();
    
    
            while (i < len1 && j < len2) {
                if (v1[i] < v2[i]) {
                    return -1;
                } else if (v1[i] > v2[i]) {
                    return 1;
                }
                i++, j++;
            }
            int r = 0;
            while (i < len1) {
                r += v1[i++];
            }
            if (r != 0) {
                return 1;
            }
            r = 0;
            while (j < len2) {
                r += v2[j++];
            }
            if (r != 0) {
                return -1;
            }
            return 0;
        }
    
        vector<int> getVersionParts(string& version) {
            vector<int> parts;
            int len = version.length();
            int v = 0;
            char d = '';
            for (int i=0; i<len; i++) {
                d = version[i];
                if (d == '.') {
                    parts.push_back(v);
                    v = 0;
                    continue;
                }
    
                v = v * 10 + d - '0';
            }
            if (d != '.') {
                parts.push_back(v);
            }
            return parts;
        }
    };

    水一发,改进一下贴一个简化版的:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int part1 = 0;
            int part2 = 0;
            int len1 = version1.length();
            int len2 = version2.length();
            
            int i = 0, j = 0;
            while (i < len1 || j < len2) {
                char ch;
                while (i < len1 && (ch = version1[i++]) != '.') {
                    part1 += ch - '0' + part1 * 10;
                }
    
                while(j < len2 && (ch = version2[j++]) != '.') {
                    part2 += ch - '0' + part2 * 10;
                }
                if (part1 > part2) {
                    return 1;
                } else if (part1 < part2) {
                    return -1;
                } else {
                    // part equal, continue to compare next version part
                }
                part1 = part2 = 0;
            }
            
            return 0;
        }
    };

     看来功力下降了,这题都做的好烦,有写了个超繁,还是第二个比较好:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            int len1 = version1.size();
            int len2 = version2.size();
            
            int val1 = 0;
            int val2 = 0;
            
            int p1 = 0;
            int p2 = 0;
            char ch = 0;
            while (p1 < len1 || p2 < len2) {
                while (p1 < len1 && (ch = version1[p1++]) != '.') {
                    val1 = val1 * 10 + ch - '0';
                }
                
                while (p2 < len2 && (ch = version2[p2++]) != '.') {
                    val2 = val2 * 10 + ch - '0';
                }
                if (val1 > val2) {
                    return 1;
                } else if (val2 > val1) {
                    return -1;
                }
                val1 = val2 = 0;
            }
            
            return 0;
        }
    };
  • 相关阅读:
    京东采集器100元、求安慰(京东产品、评价(好评、中评、差评)、价格(参考价、京东价)、图片(大图、小图)、图片识别、广告语)
    Oracle数据库创建表ID字段的自动递增
    iv
    oracle 无监听,无法用ip连接问题(ORA12541: TNS无监听程序错误 )
    sql exp
    dockManager1、dockpanl使用笔记
    windows常用控件
    ComboBoxEdit数据绑定
    winform窗体传值
    分组匹配的一个示例
  • 原文地址:https://www.cnblogs.com/lailailai/p/4174655.html
Copyright © 2011-2022 走看看