当前位置: 首页 > 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过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

 

 

相关文章:

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

问题&#xff1a; 给定两个版本号 version1 和 version2 &#xff0c;请比较它们。 版本号由一个或多个修订号组成&#xff0c;各修订号由一个 . 连接。每个修订号由 多位数字 组成&#xff0c;可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号&#xff0c;…...

云原生分级SLA

云原生分级SLA&#xff08;Service Level Agreement&#xff0c;服务等级协议&#xff09;规则是为了确保云服务提供商和客户之间对服务性能、可用性和其他关键指标有明确的理解和期望。这些规则通常基于业务需求和技术实现来制定&#xff0c;并根据服务的不同级别进行分级。以…...

java干货 线程间通信

文章目录 一、线程间通信1.1 为什么要处理线程间通信&#xff1f;1.2 什么是等待唤醒机制&#xff1f; 二、等待唤醒机制使用2.1 等待唤醒机制用到的方法2.1.1 wait2.1.2 notify 2.2 线程通信代码实践2.2.1 重要说明2.2.2 代码 一、线程间通信 1.1 为什么要处理线程间通信&…...

【人机交互 复习】第6章 交互式系统的设计

一、设计框架 1.在建立了一组需求之后&#xff0c;设计即将开始&#xff0c;建议采取自上面下的方式&#xff0c;首先把重点放在大的方面&#xff0c;生成低保真且不包含具体细节的方案&#xff0c;一般通过写剧本来确定交互设计模式与逻辑。 2.设计框架&#xff1a; 先站在一个…...

1-函数极限与连续

1 2 平方项没有考虑到&#xff08;其正负&#xff09;...

【C++题解】1670 - 象棋大赛

问题&#xff1a;1670 - 象棋大赛 类型&#xff1a;分支问题 题目描述&#xff1a; 市里要组织象棋大赛&#xff0c;年龄在 8∼30 周岁之间的选手可以报名参赛。为了公平起见&#xff0c;大赛组委会将选手们分了青年组、少年组和儿童组&#xff0c;大赛组委会规定&#xff1a…...

Samba:用于高效无限上下文语言建模的简单混合状态空间模型

Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling &#x1f4dc; 文献卡 Samba: Simple Hybrid State Space Models for Efficient Unlimited Context Language Modeling作者: Liliang Ren; Yang Liu; Yadong Lu; Yelong Shen; …...

通俗易懂的ChatGPT原理简介

一、引言 随着人工智能的发展&#xff0c;聊天机器人已经成为我们生活中的常见工具。而在众多聊天机器人中&#xff0c;ChatGPT 无疑是最受关注的一个。ChatGPT 是由 OpenAI 开发的一种基于生成式预训练模型&#xff08;GPT&#xff09;的大型语言模型。本文将通俗易懂地介绍 …...

你认为 AI 作图程序「MidJourney」有哪些比较好用的关键词?

玩了一段时间的MidJourney&#xff0c;打算把这个回答做成资源帖。也欢迎在评论区补充讨论。 MidJourney的极简指南 快速上手 装discord&#xff0c;或者直接打开网址 https://discord.gg/midjourney 注册用户。进入Midjourney的官方服务器后&#xff0c;在左侧栏找一个newb…...

9.2JavaEE——JDBCTemplate的常用方法(一)excute()方法

execute()方法用于执行SQL语句&#xff0c;其语法格式如下&#xff1a; jdTemplate.execute("SQL 语句");下面以创建数据表的SQL语句为例&#xff0c;来演示excute()方法的使用&#xff0c;具体步骤如下。 1、创建数据库 在MySQL中&#xff0c;创建一个名为spring的…...

正向代理和反向代理的区别

正向代理和反向代理的主要区别在于代理服务器所服务的对象不同。 正向代理&#xff08;Forward Proxy&#xff09;&#xff1a;正向代理的客户端是内部网络的用户。当内部网络的用户想要访问外部网络&#xff08;例如互联网&#xff09;时&#xff0c;可以通过正向代理服务器来…...

express入门03增删改查

目录 1 搭建服务器2 静态文件托管3 引入bootstrap4 引入jquery5 编写后端接口5.1 添加列表查询方法5.2 添加路由5.3 添加数据表格 总结 我们前两篇介绍了如何利用express搭建服务器&#xff0c;如何实现静态资源托管。那利用这两篇的知识点&#xff0c;我们就可以实现一个小功能…...

【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/video*‘: 没有那个文件或目录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ls:无法访问/dev/video*: 没有那个文件或目录1. 问题描述2. 原因分析3. 解决方法 总结 前言 一、ls:无法访问’/dev/video*: 没有那个文件或目录 使用的这…...

Java实现异步开发的方式

1&#xff09;、继承 Thread 2&#xff09;、实现 Runnable 接口 3&#xff09;、实现 Callable 接口 FutureTask &#xff08;可以拿到返回结果&#xff0c;可以处理异常&#xff09; 4&#xff09;、使用线程池 区别&#xff1a;1、2&#xff09;不能得到返回值 …...

小知识点快速总结:Batch Normalization Layer(BN层)的作用

本系列文章只做简要总结&#xff0c;不详细说明原理和公式。 目录 1. 参考文章2. 主要作用3. 具体分析3.1 正则化&#xff0c;降低过拟合3.2 提高模型收敛速度&#xff0c;加速训练3.3 减少梯度爆炸或者梯度消失的情况 4. 补充4.1 BN层做的是标准化不是归一化4.2 BN层的公式4.…...

【SpringCloud】负载均衡(Spring Cloud LoadBalancer)

负载均衡 当服务流量增大时&#xff0c;通常会采用增加机器的方式进行扩容。负载均衡就是用来在多个机器或者其他资源中&#xff0c;按照一定的规则合理分配负载。其中的实现可以分成客户端负载均衡和服务端负载均衡。 服务端负载均衡 在服务端进行负载均衡的算法分配。 比…...

三生随记——输入法之谜

在深夜的电脑前&#xff0c;李浩专心致志地敲打着键盘&#xff0c;为他的小说写下最后一章。然而&#xff0c;随着他不断输入文字&#xff0c;他渐渐察觉到一丝不对劲。每次他尝试输入特定的词汇&#xff0c;输入法都会自动跳转到一些与主题毫不相关的句子&#xff0c;甚至有些…...

【名词解释】Unity中的3D物理系统:刚体

Unity中的3D物理系统是用于模拟现实世界中物体的运动和相互作用的一套工具和组件。刚体&#xff08;Rigidbody&#xff09;是Unity 3D物理系统中的一个核心组件&#xff0c;它允许游戏对象&#xff08;GameObject&#xff09;受到重力和外力的影响&#xff0c;并参与碰撞检测。…...

icon转svg处理

一般情况下&#xff0c;图标我们可以找UI或者去iconfont.cn获得一个svg格式的文件。然后再IDE中以文本的方式打开&#xff0c;然后格式化&#xff0c;就可以看到代码。代码中一般是最外层一个svg标签&#xff0c;里面是一个或者多个path。这个时候&#xff0c;我们使用h方法来实…...

已成功见刊检索的国际学术会议论文海报展示(2)

【先投稿先送审】第四届计算机、物联网与控制工程国际学术会议&#xff08;CITCE 2024) 大会官网&#xff1a;www.citce.org 时间地点&#xff1a;2024年11月1-3日&#xff0c;中国-武汉 收录检索&#xff1a;EI Compendex&#xff0c;Scopus 主办单位&#xff1a;四川师范…...

EasyCVR/EasyDSS无人机直播技术助力野生动物监测

近日有新闻报道&#xff0c;一名挖掘机师傅在清理河道时&#xff0c;意外挖出一只稀有的扬子鳄&#xff0c;挖机师傅小心翼翼地将其放在一边&#xff0c;扬子鳄也顺势游回一旁的河道中。 随着人类对自然环境的不断探索和开发&#xff0c;野生动物及其栖息地的保护显得愈发重要。…...

AI视频教程下载-ChatGPT 生产力 + 时间管理

ChatGPT Productivity Time Management. ChatGPT Productivity ChatGPT 显著提升生产力 不寻常的时间管理技巧。ChatGPT 工作&#xff0c;Chat GPT 自动化&#xff0c;ChatGPT 2023&#xff01; 对关于ChatGPT的讨论感到好奇&#xff0c;想知道如何利用它为自己带来好处吗&a…...

Java 集合框架:LinkedList 的介绍、使用、原理与源码解析

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 014 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

【Ruby爬虫01】某吃瓜网站图片数据采集

介绍 由于最近在学习Ruby&#xff0c;写一个爬虫锻炼一下。涉及xml解析、多线程、xpath语法等基础知识。 实现代码 使用说明 使用前请先安装如下gem gem install nokogiri http openssl# nokogiri&#xff1a;一个解析xml和html的库&#xff0c;支持css、xpath语法 # htt…...

可以免费领取tokens的大模型服务

本文更新时间&#xff1a;2024年6月20日 豆包大模型 “亲爱的客户&#xff0c;模型提供方将在5月15日至8月30日期间&#xff0c;为您提供一次独特的机会&#xff0c;即高达5亿tokens的免费权益。这是我们对您长期支持的感谢&#xff0c;也是对未来合作的期待。” 在8月30日之…...

NSSCTF-Web题目11

目录 [鹤城杯 2021]EasyP 1、题目 2、知识点 3、思路 [SWPUCTF 2022 新生赛]numgame 1、题目 2、知识点 3、思路 [鹤城杯 2021]EasyP 1、题目 2、知识点 php代码审计 3、思路 打开题目&#xff0c;出现一段代码&#xff0c;我们对代码进行审计 这里出现了很多不懂的…...

【数据结构】第十八弹---C语言实现堆排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、堆排序 1.1、基本思想 1.2、初步代码实现 1.3、代码优化 1.4、代码测试 总结 1、堆排序 在博主数据结构第十二弹---堆的应用有详细讲解堆…...

[面试题]Kafka

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…...

centos7 离线安装zip和unzip

解压的时候发现不能解压&#xff0c;报-bash: unzip: command not found 1、访问https://www.rpmfind.net/linux/rpm2html/search.php?queryzip&submitSearch…&systemcentos&arch#/ 2、输入zip和centos搜索&#xff0c;选择el7下载 3、输入unzip和centos搜索&am…...

Linux下lsof命令使用

目录 lsof 命令使用指南基本语法常用选项使用示例 lsof vs netstatlsofnetstat区别示例对比 lsof 命令使用指南 lsof (List Open Files) 是一个用于列出当前系统中打开文件的命令&#xff0c;适用于 Unix 和类 Unix 操作系统。它不仅可以列出常规文件&#xff0c;还可以列出打…...

古典棕色学校网站模板/自媒体怎么赚钱

网页设计前端页面制作的规范和注意事项一个排版规整的网页&#xff0c;是吸引客户的第一前提要素&#xff0c;下面是小编为大家整理关于网页设计前端页面制作的规范和注意事项&#xff0c;欢迎大家阅读!1.尽量把页面的背景图及小图标整合到一张图片&#xff0c;用CSS定位方法。…...

九江的网站建设公司/深圳白帽优化

javascript验证“ JavaScript验证”一词在描述帮助用户正确填写表格的过程方面有些误导。 实际上&#xff0c;后端代码执行验证-JavaScript仅提供帮助。 但是&#xff0c;当验证和协助不是来自同一来源时&#xff0c;它们只会使人们感到困惑。 Web表单是HTML进行交互的方式-We…...

网站被k恢复/店铺推广

零基础如何学习Java&#xff1f; 首先&#xff0c;你要明白一点&#xff0c;Java入门不难&#xff01; 无论你是从事哪个行业&#xff0c;兴趣一定是最好的老师&#xff0c;也是你学习的动力。 学习方式1&#xff1a;自学 自学模式其实我个人不建议绝大部分的人选择&#x…...

医疗网站建设平台/成都seo学徒

发布时间&#xff1a;2017-09-15堡垒之夜武器要怎么选择,哪个厉害,很多小伙伴可能都不太了解,下面牛游戏小编就为你们带来了堡垒之夜新手武器选择攻略,想了解的小伙伴就一起来看看吧,希望对你们有帮助. 武器选择 相信绝大多数的新手都会认为橘色的武器一定大于紫 ...标签&#…...

专门做鞋子的网站吗/百度平台电话多少

测网站服务器带宽 内容精选换一换弹性云服务器(Elastic Cloud Server)是一种可随时自动获取、计算能力可弹性伸缩的云服务器&#xff0c;可帮助您打造可靠、安全、灵活、高效的应用环境&#xff0c;确保服务持久稳定运行&#xff0c;提升运维效率。适用于有加速需求的网站&…...

wordpress同学录/餐饮营销案例100例

例如ToolStripTextBox类&#xff0c;里面的封装就是一个TextBox控件。.NET的类库提供了ToolStripComBox和ToolStripProgressBar两个类。这些类都是从ToolStripControlHost类派生的&#xff0c;ToolStripControlHost允许在菜单栏中或工具栏上承载自定义控件&#xff0c;承载的控…...