Leetcode每日一练--35

165. 比较版本号

难度:中等

提示

给你两个 版本号字符串 version1version2 ,请你比较它们。版本号由被点 '.' 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。

比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为 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
  • version1version2 仅包含数字和 '.'
  • version1version2 都是 有效版本号
  • version1version2 的所有修订号都可以存储在 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; // 所有段均相等
}
相关推荐
心中有国也有家3 小时前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
绝知此事3 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
碧海银沙音频科技研究院3 小时前
通话AEC与语音识别AEC的软硬回采链路
深度学习·算法·语音识别
csdn_aspnet4 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
m0_629494736 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户7 小时前
用队列实现栈
数据结构·算法
做人求其滴7 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
daad7777 小时前
记一组无人机IMU传感器数据
算法
计算机安禾7 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法