题目
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
思路
以点来分割字符串,并逐个将其转换为数字进行比较即可。
public int compareVersion(String version1, String version2) {
String[] str1=version1.split("\\.");
String[] str2=version2.split("\\.");
int len1=str1.length;
int len2=str2.length;
for(int i=0;i<min(len1,len2);i++){
if(Integer.parseInt(str1[i])<Integer.parseInt(str2[i])){
return -1;
}
else if(Integer.parseInt(str1[i])>Integer.parseInt(str2[i])){
return 1;
}
}
if(len1>len2){//检查str1 后面的字符串是否全为 0
for(int j=len2;j<len1;j++){
if(Integer.parseInt(str1[j])!=0){
return 1;
}
}
}
else if(len1<len2){
for(int j=len1;j<len2;j++){
if(Integer.parseInt(str2[j])!=0){
return -1;
}
}
}
return 0;
}
private int min(int a,int b){
return (a<b)?a:b;
}
用C语言实现如下:
int compareVersion(char* version1, char* version2) {
//根据题目要求,version1和version2一定有效
int len1=strlen(version1);
int len2=strlen(version2) ;
if(len1==0||strlen==0){
return 0;
}
int i=0,j=0;
int num1=0;
int num2=0;
while(i<len1||j<len2){
num1=0;
num2=0;
while(i<len1&&version1[i]!='.'){
num1=num1*10+version1[i]-'0';
i++;
}
while(j<len2&&version2[j]!='.'){
num2=num2*10+version2[j]-'0';
j++;
}
if(num1>num2){
return 1;
}
if(num1<num2){
return -1;
}
if(version1[i]=='.'){
i++;
}
if(version2[j]=='.'){
j++;
}
}
return 0;
}