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;
    }
};
原文地址:https://www.cnblogs.com/lailailai/p/4174655.html