当前位置: 首页 > news >正文

JAVA学习-练习试用Java实现“比较版本号”

问题:


给定两个版本号 version1 和 version2 ,请比较它们。

版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。

比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1 和修订号 001 相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0 。例如,版本 1.0 小于版本 1.1 ,因为它们下标为 0 的修订号相同,而下标为 1 的修订号分别为 0 和 1 ,0 < 1 。

返回规则如下:

如果 version1 > version2 返回 1,
如果 version1 < version2 返回 -1,
除此之外返回 0。

示例 1:

输入:version1 = "1.01", version2 = "1.001"
输出:0
解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1"
示例 2:

输入:version1 = "1.0", version2 = "1.0.0"
输出:0
解释:version1 没有指定下标为 2 的修订号,即视为 "0"
示例 3:

输入:version1 = "0.1", version2 = "1.1"
输出:-1
解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2
示例 4:

输入:version1 = "1.0.1", version2 = "1"
输出:1
示例 5:

输入:version1 = "7.5.2.4", version2 = "7.5.3"
输出:-1

提示:

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

 

解答思路:

以下是使用 Java 实现比较版本号的代码:

```java

public class VersionComparator {

    public static int compareVersions(String version1, String version2) {

        String[] v1Parts = version1.split("\\.");

        String[] v2Parts = version2.split("\\.");

 

        int length = Math.max(v1Parts.length, v2Parts.length);

 

        for (int i = 0; i < length; i++) {

            int v1Part = i < v1Parts.length? Integer.parseInt(v1Parts[i].replaceAll("^0+", "")) : 0;

            int v2Part = i < v2Parts.length? Integer.parseInt(v2Parts[i].replaceAll("^0+", "")) : 0;

 

            if (v1Part > v2Part) {

                return 1;

            } else if (v1Part < v2Part) {

                return -1;

            }

        }

 

        return 0;

    }

 

    public static void main(String[] args) {

        String version1 = "1.01";

        String version2 = "1.001";

        int result = compareVersions(version1, version2);

        System.out.println(result);

    }

}

```

这段代码首先将版本号按照 '.' 分割成数组,然后比较每个修订号。如果版本号的长度不同,则较短的版本号后面的修订号视为 0。如果某个修订号大于另一个修订号,则返回 1;如果小于,则返回 -1;如果所有修订号都相等,则返回 0。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

 

 

http://www.lryc.cn/news/377390.html

相关文章:

  • 云原生分级SLA
  • java干货 线程间通信
  • 【人机交互 复习】第6章 交互式系统的设计
  • 1-函数极限与连续
  • 【C++题解】1670 - 象棋大赛
  • Samba:用于高效无限上下文语言建模的简单混合状态空间模型
  • 通俗易懂的ChatGPT原理简介
  • 你认为 AI 作图程序「MidJourney」有哪些比较好用的关键词?
  • 9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法
  • 正向代理和反向代理的区别
  • express入门03增删改查
  • 【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/video*‘: 没有那个文件或目录
  • Java实现异步开发的方式
  • 小知识点快速总结:Batch Normalization Layer(BN层)的作用
  • 【SpringCloud】负载均衡(Spring Cloud LoadBalancer)
  • 三生随记——输入法之谜
  • 【名词解释】Unity中的3D物理系统:刚体
  • icon转svg处理
  • 已成功见刊检索的国际学术会议论文海报展示(2)
  • EasyCVR/EasyDSS无人机直播技术助力野生动物监测
  • AI视频教程下载-ChatGPT 生产力 + 时间管理
  • Java 集合框架:LinkedList 的介绍、使用、原理与源码解析
  • 【Ruby爬虫01】某吃瓜网站图片数据采集
  • 可以免费领取tokens的大模型服务
  • NSSCTF-Web题目11
  • 【数据结构】第十八弹---C语言实现堆排序
  • [面试题]Kafka
  • centos7 离线安装zip和unzip
  • Linux下lsof命令使用
  • 基于ChatGPT的大型语言模型试用心得