一、题目描述      165. 比较版本号
给你两个版本号 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

二、实现思路以及代码  (双指针法)
class Solution {
    public int compareVersion(String version1, String version2) {
               String[] spiltStr1 = version1.split("\\."); // [1 01]
        int len1 = spiltStr1.length;
        String[] spiltStr2 = version2.split("\\."); // [1 001]
        int len2 = spiltStr2.length;
        int len = len1 > len2 ? len2 : len1;
        int i = 0, j = 0;
        while (i < len) {// 比较相同长度的子串的大小
            int nums1 = Integer.parseInt(spiltStr1[i]);
            int nums2 = Integer.parseInt(spiltStr2[j]);
            if (nums1 > nums2) {
                return 1;
            } else if (nums1 < nums2) {
                return -1;
            } else {//相同则后移
                i++;
                j++;
            }
        }
        if (i < len1) {//说明verson2后面已经没有字符串
            while (i < len1) {
                int nums1 = Integer.parseInt(spiltStr1[i]);
                if (nums1 > 0) {
                    return 1;
                } else { // 此处只能是 =
                    if (i == len1 - 1) { //最后一位相同
                        return 0;
                    }
                    i++;
                }
            }
        }
        if (j < len2) {//说明verson1后面已经没有字符串
            while (j < len2) {
                int nums2 = Integer.parseInt(spiltStr2[j]);
                if (nums2 > 0) {
                    return -1;
                } else { // 此处只能是 =
                    if (j == len2 - 1) {// 最后一位相同
                        return 0;
                    }
                    j++;
                }
            }
        }
        return 0;//此处是版本的子串数相同,相同版本的情况
    }

}

比较版本号:给你两个版本号 version1 和 version2 ,请你比较它们。相关推荐

  1. 比较版本号大小c语言,比较两个版本字符串version1和version2

    8 # python中的列表可以直接比较,只要把输入的数字按照'.'分割后,换为整数列表即可. num = input().split() version1 = list(map(int, num[0 ...

  2. java对于app版本号比较,Java对比APP版本号大小

    /** * 比较版本号的大小,前者大则返回一个正数,后者大返回一个负数,相等则返回0 * @param version1 * @param version2 */ public static int ...

  3. msbuild构建时用SVN修改版本号代替AssemblyVersion的Revision版本号

    持续构建需要标识出每次构建的版本,而每次构建的时候人工去修改版本是不现实的.靠程序去添加版本号,有3种可选:1) 顺序流水号:2) 时间戳:3) SVN检出代码的修订版本号 1) 顺序流水号.需要每次 ...

  4. oracle客户端查看版本号,Oracle 版本查看及版本号说明

    select * from v$version; 结果如下: BANNER 1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ...

  5. linux 查oracle版本号,查看linux中oracle版本号的方法总结

    在Linux系统下,我们通过以下的方法可以查看到Oracle的版本号.下面由学习啦小编整理了查看linux中oracle版本号的方法总结,希望对你有帮助. 查看linux中oracle版本号的方法总结 ...

  6. oracle19c的版本号_Oracle 版本查看及版本号说明

    select * from v$version; 或select banner from sys.v_$version; 结果如下: BANNER 1 Oracle Database 10g Ente ...

  7. h5 app 获取手机系统版本号、当前app的版本号

    获取手机系统版本,代码如下: mui.plusReady(function() { var version = plus.os.version; // 获取手机系统版本console.log('当前版 ...

  8. Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

    题目描述: 大家应该都会玩"锤子剪刀布"的游戏:现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...

  9. Java 比较两个版本号的大小 (通用)

    /*** 版本号比较** @param v1* @param v2* @return 0代表相等,1代表左边大,-1代表右边大* Utils.compareVersion("1.0.358_ ...

最新文章

  1. 新做了一个项目,一个人做的,关于数据传输的项目(架构说明)
  2. 是什么在吞食我们的科研时间2019-11-24
  3. *.bmp序列保存为*.raw文件[matlb实现]
  4. cx oracle 配置,cx_Oracle的配置啊。。终于搞出来了
  5. pfa是什么意思_PFA的完整形式是什么?
  6. [golang]nil slice和empty slice的区别
  7. Java UDP和TCP的区别
  8. nginx 和 nodejs配置使用搭建网站
  9. 用js的document.write输出的广告无阻塞加载的方法(转)
  10. wifi不断重连报错:eSIR_MAC_CLASS3_FRAME_FROM_NON_ASSOC_STA_REASON解决
  11. Visual C#.Net 网络程序开发-Socket篇
  12. IMAX Enhanced:让沉浸式家庭影音娱乐体验不再抽象
  13. javascript基础常识问答(八)
  14. SwiftUI 绘制刻度时钟表盘(自定义组件教程含源码)
  15. 怎么用java做日历_怎么用java做日历?实例讲解
  16. Cortex-M3技术参考手册 2022年3月1日
  17. winForm c#导出Excel
  18. eplan实战设计pdf百度云_EPLAN实战设计
  19. 太阳能MPPT充电控制板
  20. 部落节点和跨群集搜索:Elasticsearch中联合搜索的未来

热门文章

  1. A ConvNet for the 2020s 论文解读
  2. #北工大#男生自宫事件? 太狠了!称性欲影响学业,最新情况...
  3. 物业管理信息系统源码
  4. ASP.NET MVC 开源建站系统 ZKEACMS 推荐,从此网站“拼”起来
  5. python实现前景理论
  6. Vue和SpringBoot打造中学生家校互联系统
  7. table 表格自动计算
  8. Linux之crontab -e定时任务
  9. 应广单片机入门之_按键点灯
  10. 网络技术原理之数据通信原理