1、解题思路

  1. 分割版本号:将 version1 和 version2 按 . 分割成修订号列表。
  2. 比较修订号:从左到右依次比较对应位置的修订号。将修订号转换为整数(忽略前导零)进行比较。如果某个版本号的修订号数量较少,缺失的修订号视为 0。
  3. 处理边界条件:所有修订号都相等时,返回 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、复杂度分析

  • 空间复杂度 O(1)
  • 时间复杂度 O(n)