Medimu

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.

You may assume the default revision number for each level of a version number to be 0. For example, version number 3.4 has a revision number of 3 and 4 for its first and second level revision number. Its third and fourth level revision number are both 0.

Example 1:

Input: version1 = "0.1", version2 = "1.1"
Output: -1

Example 2:

Input: version1 = "1.0.1", version2 = "1"
Output: 1

Example 3:

Input: version1 = "7.5.2.4", version2 = "7.5.3"
Output: -1

Example 4:

Input: version1 = "1.01", version2 = "1.001"
Output: 0
Explanation: Ignoring leading zeroes, both “01” and “001" represent the same number “1”

Example 5:

Input: version1 = "1.0", version2 = "1.0.0"
Output: 0
Explanation: The first version number does not have a third level revision number, which means its third level revision number is default to "0"

Note:

  1. Version strings are composed of numeric strings separated by dots . and this numeric strings may have leading zeroes.
  2. Version strings do not start or end with dots, and they will not be two consecutive dots.

题目大意:比较两个版本号的大小,如果version1>version2返回1,如果version1<version2返回-1,否则返回0.

方法:

依次比较以点间隔的各段的数字大小。这道题的难点在于版本号的长度可能不相等,假如version1=1.0.0.1,version2=1.0,那么version1和version2重合的部分相同,但是多出来的部分还要继续遍历查看是否为0,如果不为零则version1较大,否则version1和version2相等。因此这里选择给较短的version号补零以达到两个version号长度相等,然后从头开始依次比较各段的数字大小,数字大的version大。

代码如下:

class Solution {
public:
    int compareVersion(string version1, string version2) {
        string v1 = version1, v2 = version2;
        while (v1 != "0" || v2 != "0") {
            int n1 = stoi(v1.substr(0, v1.find(".")));
            int n2 = stoi(v2.substr(0, v2.find(".")));
            if (n1 > n2)return 1;
            else if (n1 < n2)return -1;
            if (v1.find(".") == v1.npos) {
                v1 += ".0";
            }
            if(v2.find(".") == v2.npos){
                v2 += ".0";
            }
            v1 = v1.substr(v1.find(".") + 1);
            v2 = v2.substr(v2.find(".") + 1);
        }
        return 0;
    }
};
01-31 17:36