题目:

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

题目属于简单级别,还是挺复杂的,思路:将字符串按照"."分割,将“.”之间的数字转化为整数,然后分别对应比较。例如:1.2和13.37,分别转化为数组[1,2]和[13,37],从前往后对应比较1比13小,这时就可以得出结论1.2<13.37,若相等,则继续向后比较。这里需要注意,若两个字符串转化的数组不等长,需要将短的数组后面补0,例如,1.1和1.1.0,前者转化为[1,1],后者是[1,1,0],这时需要将前者补齐为[1,1,0],然后再对应比较。代码如下:

public int compareVersion(String version1, String version2) {
//.的个数
int dot_num1 = 0;
int dot_num2 = 0;
for(int i = 0;i<version1.length();i++)
{
if(version1.charAt(i)=='.')
dot_num1 ++;
}
for(int i = 0;i<version2.length();i++)
{
if(version2.charAt(i)=='.')
dot_num2 ++;
}
//按照.的位置截取子串
String arr1[] = new String[dot_num1+1];
String arr2[] = new String[dot_num2+1];
//记录每个字符串中的.的个数
int index1[] = new int[dot_num1+2];
int index2[] = new int[dot_num2+2]; int in1 = 1;
index1[0] = -1;
for(int i = 0;i<version1.length();++i)
{
if(version1.charAt(i)=='.')
index1[in1++] = i;
}
index1[in1] = version1.length(); int in2 = 1;
index2[0] = -1;
for(int i = 0;i<version2.length();++i)
{
if(version2.charAt(i)=='.')
index2[in2++] = i;
}
index2[in2] = version2.length(); //截取子串
int index = 0;
for(int i = 0;i<index1.length-1;i++)
{
arr1[index++] = version1.substring(index1[i]+1,index1[i+1]);
} index = 0;
for(int i = 0;i<index2.length-1;i++)
{
arr2[index++] = version2.substring(index2[i]+1,index2[i+1]);
}
int len1 = arr1.length;
int len2 = arr2.length;
int max = len1>len2?len1:len2;
//所有子串转化为整数形式
int num1[] = new int[max];
int num2[] = new int[max];
for(int i = 0;i<len1;i++)
num1[i] = Integer.parseInt(arr1[i]);
for(int i = 0;i<len2;i++)
num2[i] = Integer.parseInt(arr2[i]);
//长度不一,短的后面0补齐
/*
* *
* 例如1.0和1.0.0
* 前者生成的num1数组为[1,0]
* 后者生成的num2数组为[1,0,0]
* 这里将num1补齐为[1,0,0],便于比较
*/
if(len1>=len2)
{
for(int i = len2;i<len1;i++)
{
num2[i] = 0;
}
}
else
{
for(int i = len1;i<len2;i++)
{
num1[i] = 0;
}
}
/*for(int i = 0;i<num2.length;i++)
{
System.out.println(num2[i]);
} for(int i = 0;i<num1.length;i++)
{
System.out.println(num1[i]);
}*/
for(int i = 0;i<max;i++)
{
if(num1[i]>num2[i])
return 1;
if(num1[i]<num2[i])
return -1;
} return 0;
}

LeetCode_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. CSS学习笔记(12)--Flex 布局教程:实例篇

    原文--阮一峰博客 作者: 阮一峰 日期: 2015年7月14日 上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法. 你会看到,不管是什么布局,Flex往往都可以几行命令搞定. 我只 ...

  2. (转)love2d有用的辅助库--gamework

    此文转自朱大仙,感谢他的劳作. 翻译来源地址:https://github.com/Kadoba/gamework gamework是控制LOVE2D游戏进程流的一个项目. ↑ 这个是按原文译的, 当 ...

  3. GuozhongCrawler看准网爬虫动态切换IP漫爬虫

    有些关于URL去重的方面代码没有提供,须要自己去实现.主要这里提供思路 项目地址:http://git.oschina.net/woshidaniu/GuozhongCrawler/tree/mast ...

  4. oracle初始操作

    oracle登录 sqlplus  sys/oracle as sysdba 这个登录之后呢 会出现这个: Connected to an idle instance. 这一步是连接上 [oracle ...

  5. C语言 · 素数判断

     算法提高 素数判断   时间限制:1.0s   内存限制:512.0MB      编写一函数IsPrime,判断某个大于2的正整数是否为素数. 样例输入: 5样例输出:yes 样例输入: 9样例输 ...

  6. boa 服务的启动

    使用 buildroot 添加 boa 服务后,通过命令 boa 不能启动该服务,就研究了一下boa.conf的配置. etc/boa/boa.conf # 更改user 和Group 为root. ...

  7. JavaScript实现网页安全登录(转)

    现在很多商业网站的用户登录都是明码传输的,而一般用户又习惯于所有帐号使用相同的密码来保存,甚至很多人使用的密码和自己的银行帐号都一样哦!所 以嘛还是有一定的安全隐患的,YAHOO的免费邮箱登录使用了M ...

  8. UVa 11178:Morley’s Theorem(两射线交点)

    Problem DMorley’s TheoremInput: Standard Input Output: Standard Output Morley’s theorem states that ...

  9. jQuery的end()方法使用详解

    end()方法的定义和用法: end()方法能够回到最近的一个"破坏性"操作之前,即将匹配的元素列表变为前一次的状态.如果没有破坏性操作将返回一个空集.破坏性操作的概念:指任何改变 ...

  10. 使用jq获取文字的宽度

    获取字符串的长度很简单,但是如何获取一个字符串的字体宽度却是一个不太好操作的问题,今天查阅了许多资料,终于找到了解决方法: 1.首先,需要添加一个标签,HTML代码如下: <body> & ...