一、题目描述      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. iOS UIVisualEffectView毛玻璃亮度不符合要求
  2. 小程序 setData 学问多
  3. JVM插桩之二:Java agent基础原理
  4. I2C总线之(三)---以C语言理解IIC
  5. 网线重新插拔后恢复正常_14日科技精选:路由器经常掉线,必须重新插拔网线才能上网。什么原因?...
  6. 随想录(网络编程中的一些问题)
  7. ABAQUS后处理常用功能
  8. oreo另一个意思_墓碑上的“故,显,考,妣”是什么意思?
  9. go语言 过滤 html,golang 去除html标签-Go语言中文社区
  10. 数组的趣味应用-文曲星猜数游戏
  11. 应用树莓派GPIO完成智能红绿灯系统
  12. 【SAP Abap】记录一次完整的BDC录屏开发
  13. latex集合的包含_latex 集合相关符号:实数集,整数集,并,包含,真包含
  14. Bug heroes虫虫英雄······超详细翻译+基本攻略
  15. 从三室心脏MRI影像检测主动脉瓣病变
  16. 历年CCF-CSP认证考试题目解法/思想
  17. 脑波设备mindwaveTGC接口示例
  18. c3p0详细配置(c3p0-config.xml)及使用
  19. dasdsadsad
  20. 第一次放生,感觉很奇妙

热门文章

  1. 市场上五花八门的固码
  2. 协议转换器指示灯的含义
  3. 使用ESXCLI将ESXi 6.5或6.7升级到ESXi 7.0
  4. 基于串口通信的DSP应用程序在线升级方法
  5. DSP28335的GPIO口功能应用
  6. 常用代码模板3——搜索与图论(Bellman-Ford算法 、spfa 算法、floyd算法、Kruskal算法、染色法、匈牙利算法 )
  7. php redis redis server went away,php连接redis出现Redis server went away,rediswent
  8. 本地应用通过Dblink查询,导致Weblogic的线程堵塞而垮掉
  9. 【Unity3D自学记录】自制作手机平衡球游戏
  10. 计算机B的IP地址是,IP地址202.117.17.255/22是什么地址?()。A.网络地址B.全局 - 信管网...