原题
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、使用函数把.除去,转化为数组,然后比较两个数组中元素的大小
代码
public class Solution {
public int compareVersion(String version1, String version2) {
//注意这里的函数version1.split,.是转义字符,所以使用"\\."
String [] v1=version1.split("\\.");
String [] v2=version2.split("\\.");
int i=0;
int j=0;
while(i<v1.length&&j<v2.length){
//v1数组中的元素是字符,要转化为整数进行比较
if(Integer.parseInt(v1[i])==Integer.parseInt(v2[j])){
i++;
j++;
}else if (Integer.parseInt(v1[i])>Integer.parseInt(v2[j])) {
return 1;
}else {
return -1;
}
}
//如果一个达到了数组的长度,但是不确定另一个数组在这个长度之后是都为0还是有数值。就是类似于1.2.3.0和1.2.3是一个版本
if(i!=v1.length)
{
for(;i<v1.length;i++){
if(Integer.parseInt(v1[i])!=0)
return 1;
}
}
if(j!=v2.length)
{
for(;j<v2.length;j++){
if(Integer.parseInt(v2[j])!=0)
return -1;
}
}
return 0;
}
}