Leetcode_165_Compare Version Numbers
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/42342251
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
思路:
(1)题意为比较版本号大小。但是版本号可以包含多个小数点,例如1.0.0.1和1.0.0.0.2这样的情况也会发生。
(2)判断过程分为几种情况:如果给定的版本号包含“.”,则需要将其中的字符分开并存到链表中,如果不包含,则直接存入链表即可。
(3)两个版本号都存入到链表,遍历较长的链表,进行比较判断,直到从两个链表取出的字符对应的整数值不相等,则返回判断得到的值;如果遍历完较短的链表还未判断出大小,则视较短链表后续元素为0与较长链表进行比较,直到较长链表遍历完成为止,返回对应的值。(由于可能出现类似1.1.0.0.0、1.1.0.0.1和1.1之间的比较,此时必须遍历完较长的链表)
(4)下面简单举例子说明:
对于1.1.0.1和1.1.0
a:对应的链表(以数组表示)为[1,1,0,1]和[1,1,0]
b:遍历完前三次后,其对应的位置上的值都相等,而此时[1,1,0]所有元素都遍历完了,但是还需要继续,将[1,1,0]“第四个位置”元素设为 0进行比较,此时得到1,1,0,1]对应的元素要大于0,即1.1.0.1 > 1.1.0,返回对应结果。
c:类似1.1.1.0和1.1.1.0.0的比较类似,在此不举例子说明。
(5)代码很长,但是思路还是比较清晰的,希望对你有所帮助。
算法代码实现如下:
public static int compareVersion(String version1, String version2) { List<String> list1 = new LinkedList<String>(); if(version1.contains(".")){ char[] charArray = version1.toCharArray(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < charArray.length; i++) { if(charArray[i]!='.'){ buffer.append(charArray[i]); if(i==charArray.length-1){ list1.add(buffer.toString()); } }else{ list1.add(buffer.toString()); buffer.setLength(0); } } }else{ list1.add(version1); } List<String> list2 = new LinkedList<String>(); if(version2.contains(".")){ char[] charArray = version2.toCharArray(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < charArray.length; i++) { if(charArray[i]!='.'){ buffer.append(charArray[i]); if(i==charArray.length-1){ list2.add(buffer.toString()); } }else{ list2.add(buffer.toString()); buffer.setLength(0); } } }else{ list2.add(version2); } int max = list1.size() >= list2.size()? list1.size():list2.size(); for (int i = 0; i < max; i++) { if(list1.size()>=list2.size()){ if(i>list2.size()-1){ if(compare(list1.get(i),"0")==0){ continue; }else{ return compare(list1.get(i),"0"); } }else{ if(compare(list1.get(i),list2.get(i))==0){ continue; }else{ return compare(list1.get(i),list2.get(i)); } } } if(list2.size()>list1.size()){ if(i>list1.size()-1){ if(compare("0",list2.get(i))==0){ continue; }else{ return compare("0",list2.get(i)); } }else{ if(compare(list1.get(i),list2.get(i))==0){ continue; }else{ return compare(list1.get(i),list2.get(i)); } } } } return 0; } public static int compare(String s1, String s2){ int v1 = Integer.parseInt(s1); int v2 = Integer.parseInt(s2); if(v1>v2){ return 1; }else if(v1<v2){ return -1; }else{ return 0; } }
Leetcode_165_Compare Version Numbers的更多相关文章
- [LeetCode] Compare Version Numbers 版本比较
Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1 &l ...
- 【leetcode】Compare Version Numbers
题目描述: Compare two version numbers version1 and version2. If version1 > version2 return 1, if vers ...
- Compare Version Numbers
Compare two version numbers version1 and version1. If version1 > version2 return 1, if version1 & ...
- 【leetcode】Compare Version Numbers(middle)
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- Java for LeetCode 165 Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- LeetCode Compare Version Numbers
原题链接在这里:https://leetcode.com/problems/compare-version-numbers/ 用string.split()方法把原有string 从小数点拆成 str ...
- leetcode:Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
- 【LeetCode】165 - Compare Version Numbers
Compare two version numbers version1 and version2.If version1 > version2 return 1, if version1 &l ...
随机推荐
- Dapper连接与事务的简单封装
增删改查方面,已经有Dapper.Extension这么强大的工具了,我也实在没啥好写的,就随手写了个看起来比较优雅的连接与事务的封装.在之后使用Dapper.Extension类库时,完全可以照搬进 ...
- Elasticsearch+Hbase实现海量数据秒回查询
---------------------------------------------------------------------------------------------[版权申明:本 ...
- mysql和postgresql转义字符探究
总结 mysql依靠反斜杠\转义, postgresql 依靠单引号转义 mysql 客户端 mysql> create table usr (name varchar(), age integ ...
- [CSDN_Markdown] 使用CSDN Markdown编辑器
简介 最近CSDN支持Markdown语法写博客了,甚是欢喜.前几天写了一篇实验了下,感觉不错.准备写几篇文章介绍一下如何使用CSDN的Markdown编辑器写博客,不求全面,但求够用,望大家批评指正 ...
- 剑指Offer——如何做好自我介绍(英文版)
剑指Offer--如何做好自我介绍(英文版) Good morning ladies and gentlemen, my name is Sun Huaqiang, my hometown loc ...
- Erlang Port 小心换行
Erlang Port 小心换行(金庆的专栏)Erlang的Port接口使用cin, cout与外部Port进程通信.一般open_port()用binary模式打开. Port = open_ ...
- Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication)
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- oracle伪列
Oracle的伪列以及伪表 oracle系统为了实现完整的关系数据库功能,系统专门提供了一组成为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象时由我们完成的,而是在我们建立时由Ora ...
- Xcode的playground中对于SpriteKit物理对象的更新为何无效
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了便于SpriteKit中物理行为的调试,我们可以借助于Xc ...
- SQLite 语法(http://www.w3cschool.cc/sqlite/sqlite-syntax.html)
SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则.本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门. 大小写敏感性 有个重要的点值得注意,SQL ...