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. CentOS6.5 安装 tomcat

    1.首先下载tomcat.tar.gz包 http://tomcat.apache.org/download-70.cgi 2.移动到目标文件夹 mv tomcat.tar.gz /usr/tomca ...

  2. max-width实现图片的自适应

    在自适应布局中,有时候会让图片随着宽度的变化相应的放大或者缩小,或者说让图片等比缩放,但是每个图片的大小又不一样,这个时候我们就要用到max-width这个属性了. img{ max-width:10 ...

  3. Shell 语法之输入输出

    Linux 使用文件描述符标识每个文件对象.文件描述符是一个非负整数,可以唯一地标识会话中打开的文件.每个进程中最多可以有9个打开文件的描述符. Linux 标准文件描述符 文件描述符 缩写 描述 0 ...

  4. [css]样式合并与模块化

    原文链接:http://www.zhangxinxu.com/wordpress/2010/07/css%E7%9A%84%E6%A0%B7%E5%BC%8F%E5%90%88%E5%B9%B6%E4 ...

  5. Deep Learning 17:DBN的学习_读论文“A fast learning algorithm for deep belief nets”的总结

    1.论文“A fast learning algorithm for deep belief nets”的“explaining away”现象的解释: 见:Explaining Away的简单理解 ...

  6. Head First 设计模式--1策略模式 组合优于继承

    策略模式:第一了算法族,分别封装起来,让他们之间可以互相替换,次模式让算法的变化独立于使用算法的客户. 首先看个错误的面向对象. 假如我们需要写一个关于鸭子的程序,各种类型的鸭子.第一想到的就是建一个 ...

  7. .net Web开发学习日志 —C/S和B/S结构区别

    查看到<C/S和B/S结构区别整理> B/S结构与C/S结构都是有各自的优缺点: 前者无需安装,只要有浏览器即可,随时随地查询相关的业务,业务扩展强,维护强,共享强.在跨浏览器较难,响应速 ...

  8. eclipse中配置tomcat后,运行jsp时出现Server Tomcat v7.0 Server at localhost failed to start.

    最近在进行jsp开发学习,在配置上还是遇到很多问题. 在连接好数据库后,写了第一个jsp测试页面,结果在运行eclipse中运行toamcat时出现了错误提示:Server Tomcat v7.0 S ...

  9. div被object覆盖的解决办法

    代码: <div id="contextmenu" style="width: 120px; height:120px;DISPLAY: none; top: 26 ...

  10. python练习题代码

    1.打印出相应规则的字母 zm='ABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> for i in range(0,len(zm)): if i==0:  print ...