Leetcode每日一练--35

165. 比较版本号

难度:中等

提示

给你两个 版本号字符串 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" 处理。

提示:

  • 1 <= version1.length, version2.length <= 500
  • version1 和 version2 仅包含数字和 '.'
  • version1 和 version2 都是 有效版本号
  • version1 和 version2 的所有修订号都可以存储在 32 位整数 中

代码

cpp 复制代码
int compareVersion(char* version1, char* version2) {
    while (*version1 || *version2) {
        int num1 = 0, num2 = 0;
        
        // 提取version1当前段的整数
        while (*version1 && *version1 != '.') {
            num1 = num1 * 10 + (*version1 - '0');
            version1++;
        }
        if (*version1 == '.') version1++; // 跳过点
        
        // 提取version2当前段的整数
        while (*version2 && *version2 != '.') {
            num2 = num2 * 10 + (*version2 - '0');
            version2++;
        }
        if (*version2 == '.') version2++; // 跳过点
        
        // 比较当前段
        if (num1 < num2) return -1;
        if (num1 > num2) return 1;
    }
    return 0; // 所有段均相等
}
相关推荐
好悬给我拽开线2 小时前
ZILOT 论文解析
算法
饮水桶_T3 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘564 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi4 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者5 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet5 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞6 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂7 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛
Oneshot9 小时前
DLX(Dancing Links)算法详解:求解数独最快的算法
算法
文丑颜不良啊9 小时前
LeetCode2541~2560题目解析
java·leetcode