题目:
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.0与01是相同的。处理之前把字符串数组的对齐;
代码:
import java.util.*;
public class Solution {
public int compareVersion(String version1, String version2) {
String[] asver1 = version1.split("\\.");
String[] asver2 = version2.split("\\.");
Vector<String> vsver1 = new Vector<String>();
Vector<String> vsver2 = new Vector<String>();
for(String s : asver1)
vsver1.add(s);
for(String s:asver2)
vsver2.add(s);
int lenVer1 = vsver1.size();
int lenVer2 = vsver2.size();
int diff = lenVer1 - lenVer2;
if(diff >= 0){
for(int i=0;i<diff;i++)
vsver2.add("0");
} else {
for(int i=0;i<-diff;i++){
vsver1.add("0");
}
}
int result = 0;
for (int i=0; i < vsver1.size(); i++) {
result = compareNum(vsver1.elementAt(i), vsver2.elementAt(i));
if (result != 0)
return result;
}
return result;
}
public int compareNum(String str1, String str2) {
Integer val1 = Integer.valueOf(str1);
Integer val2 = Integer.valueOf(str2);
if(val1 > val2)
return 1;
else if(val1 < val2)
return -1;
else
return 0;
}
}