C++实现LeetCode165.版本比较
问题描述
给定两个版本号 version1 和 version2,比较它们。
版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由多位数字组成,可能包含前导零。修订号字符串不以点开头或结尾,并且两个修订号之间只有一个点。例如,2.5.33 和 0.1 都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。也就是说,修订号 1 和修订号 001 相等。如果版本号没有指定某个修订号,则该修订号视为 0。例如,版本 1.0 小于版本 1.1,因为它们只比较第一个修订号。
返回规则如下:
- 如果 version1 > version2 返回 1,
- 如果 version1 < version2 返回 -1,
- 除此之外返回 0。
解题思路
我们可以将版本号按照 '.' 进行分割,然后逐个比较每个修订号的大小。首先,我们将版本号转换为整数数组,然后逐个比较对应位置的修订号。
算法实现
下面是C++实现的代码:
#include <string>
#include <vector>
using namespace std;
int compareVersion(string version1, string version2) {
vector<int> v1, v2;
int i = 0, j = 0;
while (i < version1.size() || j < version2.size()) {
int num1 = 0, num2 = 0;
while (i < version1.size() && version1[i] != '.') {
num1 = num1 * 10 + (version1[i] - '0');
i++;
}
while (j < version2.size() && version2[j] != '.') {
num2 = num2 * 10 + (version2[j] - '0');
j++;
}
if (num1 > num2) return 1;
if (num1 < num2) return -1;
i++;
j++;
}
return 0;
}
示例说明
示例 1:
string version1 = \"1.01\";
string version2 = \"1.001\";
int result = compareVersion(version1, version2);
// result = 0,版本号相等
示例 2:
string version1 = \"1.0\";
string version2 = \"1.0.0\";
int result = compareVersion(version1, version2);
// result = 0,版本号相等
以上是LeetCode165.版本比较的完整攻略,希望对你有帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现LeetCode165.版本比较) - Python技术站