[LeetCode] 165. Compare Version Numbers
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:
- Version strings are composed of numeric strings separated by dots
.
and this numeric strings may have leading zeroes. - 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; } };