[LeetCode] 165. Compare Version Numbers 比较版本数
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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 第一个坏版本
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞