C++实现LeetCode165.版本比较)

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技术站

(0)
上一篇 2023年8月3日
下一篇 2023年8月3日

相关文章

  • C# 使用SqlBulkCopy类批量复制大数据

    C# 使用SqlBulkCopy类批量复制大数据 如果你有一个需要在数据库中批量插入大量数据的情况,使用循环插入的方式可能会导致性能问题。为此,.NET Framework提供了SqlBulkCopy类,用于批量复制数据。本文将介绍如何使用C#中的SqlBulkCopy类来批量插入大数据。 什么是SqlBulkCopy类 SqlBulkCopy类是.NET …

    其他 2023年3月28日
    00
  • win10预览版10041 iso镜像下载地址 win10预览版iso镜像网盘下载

    Win10预览版10041 ISO镜像下载攻略 Win10预览版10041是Windows 10操作系统的一个早期测试版本,本攻略将详细介绍如何下载该版本的ISO镜像文件。以下是完整的攻略过程: 步骤1:寻找可靠的下载地址 首先,你需要找到可靠的下载地址来获取Win10预览版10041的ISO镜像文件。以下是两个示例说明: 示例说明1:Microsoft官方…

    other 2023年8月4日
    00
  • Android中WebView加载网页设置进度条

    Android中WebView加载网页设置进度条攻略 在Android中,我们可以使用WebView来加载网页,并通过设置进度条来显示加载进度。下面是一个详细的攻略,包含了两个示例说明。 步骤一:添加WebView和ProgressBar到布局文件 首先,在你的布局文件中添加一个WebView和一个ProgressBar,用于显示网页内容和加载进度。以下是一…

    other 2023年8月24日
    00
  • C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例

    C#使用Gembox.SpreadSheet向Excel写入数据及图表的实例 Gembox.SpreadSheet是一个强大的C#库,用于处理Excel文件。以下是使用Gembox.SpreadSheet向Excel写入数据及图表的实例的详细攻略: 首先,确保已经安装了Gembox.SpreadSheet库。可以通过NuGet包管理器或手动下载并引用Gemb…

    other 2023年10月15日
    00
  • Go语言中的逃逸分析究竟是什么?

    Go语言中的逃逸分析是一种优化技术,可以帮助开发人员深入理解Go的内存管理机制,从而提高程序的性能和效率。在本文中,我将详细介绍Go语言中的逃逸分析是什么以及如何使用它来优化程序。 什么是逃逸分析? 在Go语言中,当变量(或对象)在函数内部创建时,会在栈上分配内存;当变量需要在函数返回后仍然存在时,会在堆上分配内存。逃逸分析是一种静态分析技术,用于确定一些变…

    other 2023年6月26日
    00
  • 电脑桌面不显示输入法怎么办 电脑上输入法不见了的解决方法

    电脑桌面不显示输入法怎么办? 当电脑桌面上的输入法图标不见了,或者无法切换输入法时,可以按照以下步骤进行排查和解决: 1. 检查输入法设置 首先要确认电脑上是否已经安装了输入法,以及是否启用了输入法。可以通过以下步骤检查: 打开“设置”应用; 点击“时间和语言”; 选择“语言”,查看是否已添加了需要使用的语言; 选择“偏好设置”,查看是否已启用了需要使用的输…

    other 2023年6月27日
    00
  • html5 video标签屏蔽右键视频另存为的js代码

    要实现html5 video标签屏蔽右键视频另存为,我们可以使用Javascript代码来解决。具体的实现过程如下: 1. 创建一个video标签 首先,我们需要在HTML中创建一个video标签,并指定要加载的视频文件路径。 <video id="myVideo" controls preload="metadata&q…

    other 2023年6月27日
    00
  • X86是32位还是64位 X86和X64含义介绍

    X86是32位还是64位 X86是一种处理器架构,最初设计为32位,但后来也发展出了64位版本。下面将详细介绍X86的32位和64位版本以及它们的含义。 X86-32(32位) X86-32是指32位的X86处理器架构。它最早出现在Intel 80386处理器上,因此得名。X86-32处理器具有以下特点: 寻址空间:32位处理器可以寻址2^32(4GB)的内…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部