本文是在学习中的总结,欢迎转载但请注明出处: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的更多相关文章

  1. [LeetCode] Compare Version Numbers 版本比较

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

  2. 【leetcode】Compare Version Numbers

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

  3. Compare Version Numbers

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

  4. 【leetcode】Compare Version Numbers(middle)

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

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

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

  6. Java for LeetCode 165 Compare Version Numbers

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

  7. LeetCode Compare Version Numbers

    原题链接在这里:https://leetcode.com/problems/compare-version-numbers/ 用string.split()方法把原有string 从小数点拆成 str ...

  8. leetcode:Compare Version Numbers

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

  9. 【LeetCode】165 - Compare Version Numbers

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

随机推荐

  1. Android Studio精彩案例(三)《模仿微信ViewPage+Fragment实现方式二》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 写在前面的话:此专栏是博主在工作之余所写,每一篇文章尽可能写的思路清晰一些,属于博主的"精华"部分,不同于以往专栏 ...

  2. Linux下一次数据仓库进行迁移记录

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52768613 前言:数据库每天的 ...

  3. Unity插件 - MeshEditor(八)模型镜像特效

    将静态模型(带MeshFilter)按指定轴向.指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之前模型的顶点, ...

  4. Erlang Port 小心换行

    Erlang Port 小心换行(金庆的专栏)Erlang的Port接口使用cin, cout与外部Port进程通信.一般open_port()用binary模式打开.    Port = open_ ...

  5. 理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...

  6. Android Studio下多渠道打包

    Android Studio下实现多渠道打包 直接上步骤 步骤 1. 清单文件添加属性(以友盟统计为例) 在application标签下添加meta-data属性 <application -- ...

  7. Scikit-learn:模型评估Model evaluation

    http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...

  8. Linux for sougou ping yin (http://pinyin.sogou.com/linux/help.php)

    安装指南 Ubuntu / Ubuntu Kylin 14.04 LTS 版本 只需双击下载的 deb 软件包,即可直接安装搜狗输入法. Ubuntu 12.04 LTS 版本 由于 Ubuntu 1 ...

  9. Java并发框架——AQS之原子性如何保证?

    在研究AQS框架时,会发现这个类很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要 ...

  10. windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\

    windows下Eclipse操作MapReduce例子报错: 14/05/18 22:05:29 WARN util.NativeCodeLoader: Unable to load native- ...