Compare two version numbers version1 and version1.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

Here is an example of version numbers ordering:

0.1 < 1.1 < 1.2 < 13.37

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

给2个版本的字符串,里面只含数字和 '.' ,比较两个版本的大小。

解法:对字符串以 '.' ,进行分拆形成数组。然后从数组的第一个元素开始比较,如果相同就比较下一个元素,如果不同v1大就返回1,v2 大就返回-1,如果比较到最后都相同就返回0。

注意:如果产生的两个数组长度不一样,例如:1.2 < 1.2.3 则要把短的后面加上'0'补齐数组长度和长的一样,然后在进行比较。

Java:

    String[] arr1 = version1.split("\\.");
String[] arr2 = version2.split("\\."); int i=0;
while(i<arr1.length || i<arr2.length){
if(i<arr1.length && i<arr2.length){
if(Integer.parseInt(arr1[i]) < Integer.parseInt(arr2[i])){
return -1;
}else if(Integer.parseInt(arr1[i]) > Integer.parseInt(arr2[i])){
return 1;
}
} else if(i<arr1.length){
if(Integer.parseInt(arr1[i]) != 0){
return 1;
}
} else if(i<arr2.length){
if(Integer.parseInt(arr2[i]) != 0){
return -1;
}
} i++;
} return 0;
}

Java:

public class Solution {
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null) return 0;
String[] v1s = version1.split("\\.");
String[] v2s = version2.split("\\.");
int i = 0, j = 0, res = 0;
while (i < v1s.length || j < v2s.length) {
int ver1 = i < v1s.length ? Integer.valueOf(v1s[i++]) : 0;
int ver2 = j < v2s.length ? Integer.valueOf(v2s[j++]) : 0;
if (ver1 < ver2) return -1;
else if (ver1 > ver2) return 1;
}
return 0;
}
}

Python:

class Solution2(object):
def compareVersion(self, version1, version2):
"""
:type version1: str
:type version2: str
:rtype: int
"""
v1, v2 = version1.split("."), version2.split(".") if len(v1) > len(v2):
v2 += ['0' for _ in xrange(len(v1) - len(v2))]
elif len(v1) < len(v2):
v1 += ['0' for _ in xrange(len(v2) - len(v1))] i = 0
while i < len(v1):
if int(v1[i]) > int(v2[i]):
return 1
elif int(v1[i]) < int(v2[i]):
return -1
else:
i += 1 return 0

Python: My solution  

class Solution(object):
"""
:type v1, str
:type v2, str
:rtype: int
"""
def compareVersion(self, v1, v2):
split_v1 = v1.split('.')
split_v2 = v2.split('.')
print split_v1, split_v2
n1 = len(split_v1)
n2 = len(split_v2) if n1 < n2:
for i in xrange(n2 - n1):
split_v1 += '0'
elif n1 > n2:
for i in xrange(n1 - n2):
split_v2 += '0' for i in xrange(len(split_v1)):
if split_v1[i] == split_v2[i]:
continue
if split_v1[i] > split_v2[i]:
return 1
if split_v1[i] < split_v2[i]:
return -1 return 0

类似题目:

[LeetCode] 278. First Bad Version 第一个坏版本

  

All LeetCode Questions List 题目汇总

[LeetCode] 165. Compare Version Numbers 比较版本数的更多相关文章

  1. ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  2. Java for LeetCode 165 Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

  3. Java [Leetcode 165]Compare Version Numbers

    题目描述: Compare two version numbers version1 and version2.If version1 > version2 return 1, if versi ...

  4. Leetcode 165 Compare Version Numbers

    题意:比较版本号的大小 有点变态,容易犯错 本质是字符串的比较,请注意他的版本号的小数点不知1个,有的会出现01.0.01这样的变态版本号 class Solution { public: int c ...

  5. 【LeetCode】165. Compare Version Numbers 解题报告(Python)

    [LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  6. 165. Compare Version Numbers - LeetCode

    Question 165. Compare Version Numbers Solution 题目大意: 比较版本号大小 思路: 根据逗号将版本号字符串转成数组,再比较每个数的大小 Java实现: p ...

  7. 【刷题-LeetCode】165 Compare Version Numbers

    Compare Version Numbers Compare two version numbers version1 and version2. If *version1* > *versi ...

  8. 【一天一道LeetCode】#165. Compare Version Numbers

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  9. 【LeetCode】165 - Compare Version Numbers

    Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...

随机推荐

  1. Kotlin反射重要组件与流程详解

    继续学习Kotlin反射,我们知道对于Java的反射类是Class,而在Kotlin中的反射类是KClass,而在Java当中对于反射中的方法是用Method,而在Kotlin中是用KFunction ...

  2. python 打印html源码中xpath

    实例: #coding:utf-8 from lxml import etree import urllib url=urllib.urlopen('http://www.baidu.com').re ...

  3. Linux CentOS7.x安装docker全过程

    1.在安装docker之前,首先使用yum -y remove docker命令移除系统中已有的旧版本的docker yum -y remove docker 这里显示该系统没有安装过docker: ...

  4. 【CLAA系列】CLAA协议学习(CS方向)

    工作上用Lora,需要开发相关模块,分享一下学习的内容: Lora: 博主是做IT的,对Lora不了解.简单理解为LPWAN(Low Power Wide Area Network)中一种技术,目前主 ...

  5. python的多线程是否没有用了

    python的多线程是否就完全没有用了呢? 相同的代码,为何有时候多线程会比单线程慢,有时又会比单线程快? 这主要跟运行的代码有关: 1. CPU密集型代码 (各种循环处理.计数等等 ),在这种情况下 ...

  6. 趣味编程:FizzBuzz(Haskell版)

    g :: Int -> Int -> Int -> String g n 0 0 = "FizzBuzz" g n 0 _ = "Fizz" ...

  7. 从.NET/CLR返回的hresult:0x8013XXXX的解释

    什么是0x8013XXXX 有时您可能会遇到从.NET返回的神秘HRESULT,它以0x8013开头,例如0x80131522.不幸的是,Visual Studio附带的错误查找并不能真正处理那些奇怪 ...

  8. 24-ESP8266 SDK开发基础入门篇--Android TCP客户端.控制 Wi-Fi输出PWM的占空比,调节LED亮度

    https://www.cnblogs.com/yangfengwu/p/11204436.html 刚才有人说需要点鸡汤.... 我想想哈;我还没问关于哪方面的鸡汤呢!!! 我所一直走的路线 第一: ...

  9. [RN] React Native 下列表 FlatList 和 SectionList

    1.FlatList FlatList组件用于显示一个垂直的滚动列表,其中的元素之间结构近似而仅数据不同. FlatList更适于长列表数据,且元素个数可以增删.和ScrollView不同的是,Fla ...

  10. JavaScript高级程序编程(一)

    第一章 JavaScript简史  20170510 JavaScript 组成部分: 核心(ECMAScript)  文档对象模型(DOM)浏览器对象模型(BOM) Netscape Navigat ...