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、考虑清楚细节就可以了,题目本身不难。

1、直接判断,代码较多。

public class Solution {
public int compareVersion(String version1, String version2) {
int len1 = version1.length();
int len2 = version2.length();
int start1 = 0;
int start2 = 0;
int[] nums = new int[2];
while (start1 < len1 && start2 < len2){
nums = getNum(version1, start1, len1);
int num1 = nums[1];
start1 = nums[0];
nums = getNum(version2, start2, len2);
int num2 = nums[1];
start2 = nums[0];
if (num1 > num2){
return 1;
} else if (num1 < num2){
return -1;
}
}
if (start1 >= len1 && start1 >= len2){
return 0;
} else if (start1 >= len1){
while (start2 < len2){
nums = getNum(version2, start2, len2);
if (nums[1] != 0){
return -1;
}
start2 = nums[0];
}
return 0;
} else {
while (start1 < len1){
nums = getNum(version1, start1, len1);
if (nums[1] != 0){
return 1;
}
start1 = nums[0];
}
return 0;
}
}
public int[] getNum(String str, int start, int len){
int end = start;
int[] result = new int[2];
while (end < len && str.charAt(end) != '.'){
end++;
}
result[0] = end+1;
if( end == start){
result[1] = 0;
} else {
result[1] = Integer.valueOf(str.substring(start,end));
}
return result;
}
}

2、同样的处理方式,也有很简单的写法(参考discuss)

public class Solution {
public int compareVersion(String version1, String version2) {
int temp1 = 0,temp2 = 0;
int len1 = version1.length(),len2 = version2.length();
int i = 0,j = 0;
while(i<len1 || j<len2) {
temp1 = 0;
temp2 = 0;
while(i<len1 && version1.charAt(i) != '.') {
temp1 = temp1*10 + version1.charAt(i++)-'0';
}
while(j<len2 && version2.charAt(j) != '.') {
temp2 = temp2*10 + version2.charAt(j++)-'0'; }
if(temp1>temp2) return 1;
else if(temp1<temp2) return -1;
else {
i++;
j++; } }
return 0;
}
}

3、使用split()。(参考discuss)

public int compareVersion(String version1, String version2) {

    String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\."); for ( int i = 0; i < Math.max(v1.length, v2.length); i++ ) {
int num1 = i < v1.length ? Integer.parseInt( v1[i] ) : 0;
int num2 = i < v2.length ? Integer.parseInt( v2[i] ) : 0;
if ( num1 < num2 ) {
return -1;
} else if ( num1 > num2 ) {
return +1;
}
} return 0;
}

✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java的更多相关文章

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

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

  2. Java for LeetCode 165 Compare Version Numbers

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

  3. Java [Leetcode 165]Compare Version Numbers

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

  4. Leetcode 165 Compare Version Numbers

    题意:比较版本号的大小 有点变态,容易犯错 本质是字符串的比较,请注意他的版本号的小数点不知1个,有的会出现01.0.01这样的变态版本号 class Solution { public: int c ...

  5. 165. Compare Version Numbers - LeetCode

    Question 165. Compare Version Numbers Solution 题目大意: 比较版本号大小 思路: 根据逗号将版本号字符串转成数组,再比较每个数的大小 Java实现: p ...

  6. 【LeetCode】165. Compare Version Numbers 解题报告(Python)

    [LeetCode]165. Compare Version Numbers 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  7. 【刷题-LeetCode】165 Compare Version Numbers

    Compare Version Numbers Compare two version numbers version1 and version2. If *version1* > *versi ...

  8. 【一天一道LeetCode】#165. Compare Version Numbers

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 来源: htt ...

  9. 【LeetCode】165 - Compare Version Numbers

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

随机推荐

  1. 遍历List中的object对象

    我的解决方法是 List<Object[]> list = queryTrans; for (Object[] o : list) { for (int q = 0; q < o.l ...

  2. 《BI那点儿事》META DATA(元数据)

    关于数据仓库的数据,指在数据仓库建设过程中所产生的有关数据源定义,目标定义,转换规则等相关的关键数据.同时元数据还包含关于数据含义的商业信息,所有这些信息都应当妥善保存,并很好地管理.为数据仓库的发展 ...

  3. Hibernate <查询缓存>

    查询缓存: 定义:查询缓存它是基于二级缓存的,可以保存普通属性查询的结果,查询对象实体时,他会保存id作为键,查询结果作为值,下个对象访问时,可以直接查到 查询缓存查询实体对象时,显著的特点是,会执行 ...

  4. HDU-4534 郑厂长系列故事——新闻净化 AC自动机+DP

    题意:给定一些单词,这些单词必须要是一个目标串的子串,同时给定一些串,这些串不能够出现在目标串中,其余一些串只会带来不同附加值.现在问满足前两者的情况下,要求附加值最大.数据给定一个原始串,现在要求在 ...

  5. 推荐流程设计器http://www.processon.com/

    以前一直用的Rational Rose进行类图,流程设计,最近发现了ProcessOn使用了下,感觉很好用,相比rose 1.有中文说明,rose全专业英文,理解起来比较费劲: 2.直线比较直,ros ...

  6. swift混编oc碰到的问题

    在swift中混编苹果官方的Reachability OC文件. 因为swift工程的target是生成framework而非app,framework中调用oc与app中使用桥接文件还不一样,参考: ...

  7. java.lang.UnsupportedClassVersionError: org/apache/maven/cli/MavenCli : Unsupported major.minor version 51

    http://blog.csdn.net/e_wsq/article/details/52100234 一日换了一下MyEclipse,换成2016CI,结果从SVN上下载了一个工程后出现以下错误: ...

  8. laravel 中 与前端的一些事5 之解决缓存问题:version

    Version的主要目的就是解决浏览器的缓存问题,在这个方面,Elixir给出的解决方案很完美 应用场景:当我们的css或者js重新更新了,我们需要告诉浏览器我们不要缓存的css或js静态文件样式时, ...

  9. 并发编程 17—— Lock

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  10. tomcat通过conf-Catalina-localhost目录发布项目详解 摘自:http://www.cnblogs.com/iyangyuan/archive/2013/09/12/3316444.html

    Tomcat发布项目的方式大致有三种,但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件,来发布项目,是最佳选择. 因为这样对tomcat的入侵性最小,只需 ...