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 ...
随机推荐
- Minimize the error CodeForces - 960B
You are given two arrays A and B, each of size n. The error, E, between these two arrays is defined ...
- MVC和MTV模式
著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交 ...
- Visual studio debug—Process with an Id of 5616 is not running的解决方法
今天调试的时候,碰到下面的问题 打开项目的csproj文件,拉到最下方找我我图中红框中的部分,删除它即可.
- Ubuntu14下安装svn仓库,以及权限配置
sudo apt-get update 接下来安装svn apt-get install subversionapt-get install libapache2-svn 检查svn是否安装成功了: ...
- 详解EBS接口开发之供应商导入(补充)--错误信息处理
check reject details on records of AP_SUPPLIER_INT SELECT s.parent_table,s.reject_lookup_code,S.LAST ...
- Java继承时的初始化顺序
Java程序在启动和运行时,需要首先完成初始化的工作.在涉及到继承.static成员变量等因素时,初始化的顺序就复杂起来.下面以一个例子说明继承时的Java初始化顺序. 例子: class Insec ...
- Windows安装和使用fftw
FFTW是一个比较快的.非常出名的一个DFT的开源库. 本文探索安装和配置FFTW,用Visual Studio 2008来使用fftw. 第一步:下载最新的fftw库 这一步很简单,只要在googl ...
- Linux系统编程----僵尸进程
什么是僵尸进程? 僵尸进程, 指子进程退出后, 父进程还没有回收子进程的资源,这个子进程就处在于僵尸状态. 来看看如何产生? #include <stdio.h> #include < ...
- 【一天一道LeetCode】#299. Bulls and Cows
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 You are ...
- acm入门搜索-石油数目
题意:给出一个N*M的矩形区域和每个区域的状态--有/没有石油,(定义)如果两个有石油的区域是相邻的(水平.垂直.斜)则认为这是属于同一个oil pocket. 求这块矩形区域一共有多少oilpock ...