题目

[compare-version-numbers](https://leetcode.com/problems/compare-version-numbers/)


算法

* 直接模拟

* stringstream

* strtol


代码

* 直接模拟

class Solution {
private:
    // get number from ver[pos] into num
    void getNum(const string &version, int &len, int &pos, int &num) {
        num = 0;
        while (pos < len && version[pos] != '.') {
            num = num * 10 + version[pos] - '0';
            pos++;
        }
        pos++;
    }

public:
    int compareVersion(string version1, string version2) {
        int len1 = version1.length();
        int len2 = version2.length();
        int curPos1 = 0, curPos2 = 0;
        int num1, num2;
        while (curPos1 < len1 || curPos2 < len2) {
            getNum(version1, len1, curPos1, num1);
            getNum(version2, len2, curPos2, num2);
            if (num1 > num2)
                return 1;
            if (num1 < num2)
                return -1;
        }
        return 0;
    }
};

* streamstring

class Solution {
public:
    int compareVersion(string version1, string version2) {
        istringstream v1(version1 + "."), v2(version2 + ".");
        int d1 = 0, d2 = 0;
        char dot = '.';
        while (v1.good() || v2.good()) {
            if (v1.good()) v1 >> d1 >> dot;
            if (v2.good()) v2 >> d2 >> dot;
            if (d1 > d2) return 1;
            else if (d1 < d2) return -1;
            d1 = d2 = 0;
        }
        return 0;
    }
};

* strtol

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int res = 0;
        char *v1 = (char*)version1.c_str(), *v2 = (char*)version2.c_str();
        while (res == 0 && (*v1 != '\0' || *v2 != '\0')) {
            long d1 = *v1 == '\0' ? 0 : strtol(v1, &v1, 10);
            long d2 = *v2 == '\0' ? 0 : strtol(v2, &v2, 10);
            if (d1 > d2) return 1;
            else if (d1 < d2) return -1;
            else {
                if (*v1 != '\0') ++v1;
                if (*v2 != '\0') ++v2;
            }
        }
        return res;
    }
};

results matching ""

    No results matching ""