题目:

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. docker + ubuntun 安装show doc

    基本安装步骤 Ubuntu Docker 安装 Docker 支持以下的 Ubuntu 版本: Ubuntu Precise 12.04 (LTS) Ubuntu Trusty 14.04 (LTS) ...

  2. 一款基于css3的散子3D翻转特效

    css3使我们能够跳出2d空间,实现3维空间的动画效果,这里给出一个自动翻转的3d色子动画效果制作过程. 第一步,首先进行HTML的布局,对于3D效果,布局有一定的规律,代码如下: <body& ...

  3. Android——手机尺寸相关的概念 +尺寸单位+关于颜色

    手机的尺寸: 屏幕对角线的长度,单位为英寸(2.54cm) 手机的分辨率: 屏幕能显示的像素的数量, 一般用在长方向上数量*宽方向上数量来表达 手机的像素密度: pixels per inch,也称P ...

  4. 三、thinkphp

    'URL_PATHINFO_DEPR'=>'-',//修改URL的分隔符 'TMPL_L_DELIM'=>'<{', //修改左定界符 'TMPL_R_DELIM'=>'}&g ...

  5. Emmet快速编写HTML代码

    缩写是Emmet工具的核心,这些特殊的表达式通过Emmet解析并转化为结构化的代码块,而语法用CSS选择器,HTML标签和一些Emmet特定的代码生成,所以对于任何一个前端开发人员都可以很容易地掌握和 ...

  6. [android] AndroidManifest.xml -【manifest】

    <manifest> 原文链接:http://www.android-doc.com/guide/topics/manifest/manifest-element.html 最早引入的AP ...

  7. [工具使用] 如何访问github

    1.ping github.com,记录github的ip:192.30.252.129 2.找到系统的 hosts文件位置: C:\Windows\System32\drivers\etc\host ...

  8. selenium测试环境搭建(一)

    selenium测试环境搭建 下载资源 1.  selenium-java-2.53.0.zip 下载地址:http://pan.baidu.com/s/1dFDf27Z 2. Firefox Set ...

  9. 错题0913-java

    子类A继承父类B, A a = new A(); 则父类B构造函数.父类B静态代码块.父类B非静态代码块.子类A构造函数.子类A静态代码块.子类A非静态代码块 执行的先后顺序是? A:父类B静态代码块 ...

  10. Spring MVC属于SpringFrameWork的后续产品

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它 ...