[LeetCode]165. 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

方法

遍历2个字符串,获取版本号,遇到.时停止,比较版本号。如果版本号不同,返回1或-1;如果相同,继续遍历,如果其中1个字符串到了'\0', 继续遍历第2个字符串,直到2个字符串都遍历到了'\0'。

c代码

#include <assert.h>
#include <string.h>

int compareVersion(char* version1, char* version2) {
    int versionInt1, versionInt2;
    while(*version1!='\0' || *version2!='\0') {
        versionInt1 = 0;
        while(*version1 != '.' && *version1!='\0') {
            versionInt1 = versionInt1*10+*version1-'0';
            version1++;
        }
        if(*version1 == '.')
            version1++;
        versionInt2 = 0;
        while(*version2 != '.' && *version2!='\0') {
            versionInt2 = versionInt2*10+*version2-'0';
            version2++;
        }
        if(*version2 == '.')
            version2++;
        if(versionInt1 > versionInt2)
            return 1;
        else if(versionInt1 < versionInt2)
            return -1;
    }
    return 0;
}

int main() {
    assert(compareVersion("13.37", "13.37.2") == -1);

    return 0;
}

推荐阅读更多精彩内容