1、解题思路
- 分割版本号:将 version1 和 version2 按 . 分割成修订号列表。
- 比较修订号:从左到右依次比较对应位置的修订号。将修订号转换为整数(忽略前导零)进行比较。如果某个版本号的修订号数量较少,缺失的修订号视为 0。
- 处理边界条件:所有修订号都相等时,返回 0。如果某个修订号更大,直接返回相应结果。
2、代码实现
C++
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
int compare(string version1, string version2) {
// write code here
vector<int> v1 = split(version1);
vector<int> v2 = split(version2);
int n = max(v1.size(), v2.size());
for (int i = 0; i < n; ++i) {
int num1 = i < v1.size() ? v1[i] : 0;
int num2 = i < v2.size() ? v2[i] : 0;
if (num1 > num2) {
return 1;
}
if (num1 < num2) {
return -1;
}
}
return 0;
}
private:
vector<int> split(const string& s) {
vector<int> nums;
stringstream ss(s);
string item;
while (getline(ss, item, '.')) {
nums.push_back(stoi(item));
}
return nums;
}
};
Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare (String version1, String version2) {
// write code here
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
int n = Math.max(v1.length, v2.length);
for (int i = 0; i < n; ++i) {
int num1 = i < v1.length ? Integer.parseInt(v1[i]) : 0;
int num2 = i < v2.length ? Integer.parseInt(v2[i]) : 0;
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
}
}
Python
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 比较版本号
# @param version1 string字符串
# @param version2 string字符串
# @return int整型
#
class Solution:
def compare(self , version1: str, version2: str) -> int:
# write code here
v1 = list(map(int, version1.split('.')))
v2 = list(map(int, version2.split('.')))
n = max(len(v1), len(v2))
for i in range(n):
num1 = v1[i] if i < len(v1) else 0
num2 = v2[i] if i < len(v2) else 0
if num1 > num2:
return 1
if num1 < num2:
return -1
return 0
3、复杂度分析