题目描述
给你两个 版本号字符串version1和version2,请你比较它们。版本号由被点 ‘.’ 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 0。
返回规则如下:
如果 version1 < version2 返回 -1,
如果 version1 > version2 返回 1,
除此之外返回 0。
样例
示例 1:
输入:version1 = "1.2", version2 = "1.10"
输出:-1
解释:version1 的第二个修订号为 "2",version2 的第二个修订号为 "10":2 < 10,所以 version1 < version2。
示例 2:
输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,"01" 和 "001" 都代表相同的整数 "1"。
示例 3:
输入:version1 = "1.0", version2 = "1.0.0.0"
输出:0
解释:version1 有更少的修订号,每个缺失的修订号按 "0" 处理。
C++ 代码
class Solution {
public:
int compareVersion(string version1, string version2) {
int i= 0, j = 0;
while (i < version1.size() || j < version2.size())
{
int x = i, y = j;
while (x < version1.size() && version1[x] != '.') x ++;
while (y < version2.size() && version2[y] != '.') y ++;
int a = x == i ? 0 : atoi(version1.substr(i, x - i).c_str());
int b = y == j ? 0 : atoi(version2.substr(j, y - j).c_str());
if (a > b) return 1;
if (a < b) return -1;
i = x + 1;
j = y + 1;
}
return 0;
}
};