165. Compare Version Numbers
来源:互联网 发布:hyde知乎 编辑:程序博客网 时间:2024/06/16 13:50
Compare two version numbers version1 and version2.
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.
分析:
- 切割字符串,分别保存到数组str1,str2中
- 比较两个数组的长度,将数组长度中较小的赋值给small
- 在数组中循环比较每个数据的大小,不相等就返回结果;长度相等且数值大小也都一样,就返回0;
- 如果数组长度不同,在较长的数组中从small处开始遍历,如果数组中每一个数值都是0,结果将返回0。否则返回结果,如果较长数组是str1,则返回1,否则返回-1;
测试用例:
@Test public void compareVersionTest(){ println(s.compareVersion("", "")); println(s.compareVersion("1.0", "1")); println(s.compareVersion("1.0.0.1", "1")); println(s.compareVersion("1.25.3", "1.156.4")); println(s.compareVersion("123.2", "13.37")); println(s.compareVersion("13.37", "13.37")); }
特殊用例:
- 两个字符串都为空
- 一个为1.0 ,另一个为1
代码:
public int compareVersion(String version1, String version2) { if(version1==null || version2 == null) return 0; if(version1.equals("")&& version2.equals("")) return 0; if(version1.equals("")) return -1; if(version2.equals("")) return 1;// 直接使用'.'进行切割没有切出来,故做此替换// String[] str1 = version1.split(".");// String[] str2 = version2.split("."); version1 = version1.replace('.', ':'); version2 = version2.replace('.', ':'); String[] str1 = version1.split(":"); String[] str2 = version2.split(":"); int small = str1.length>str2.length?str2.length:str1.length; for(int i = 0;i<small;i++){ int num1 = Integer.parseInt(str1[i]); int num2 = Integer.parseInt(str2[i]); if( num1 > num2){ return 1; } if(num1<num2){ return -1; } } //对应println(s.compareVersion("13.37", "13.37")); if(small == str1.length && small == str2.length){ return 0; }// 对应println(s.compareVersion("1.0", "1")); while(small<str1.length){ if(Integer.parseInt(str1[small])==0){ small++; continue; }else{ return 1; } } while(small<str2.length){ if(Integer.parseInt(str2[small])==0){ small++; continue; }else{ return -1; } } return 0; }
0 0
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 165. Compare Version Numbers
- 《Cocoa设计模式》读书笔记(2)
- 【leetcode】115. Distinct Subsequences【java】
- Java将Json字符串转化为对象(包含list型变量)
- [leetcode]382. Linked List Random Node
- 字符串哈希函数
- 165. Compare Version Numbers
- 有关match_parent和wrap_content
- 《Cocoa设计模式》读书笔记(3)
- linux 定时器
- Oracle 修改用户密码
- 80211协议字段解析
- spring+springmvc+hibernate+maven
- 10分钟搭建Windows平台Spark开发环境并调试运行Naive Bayes分类程序
- setLayoutParams