题目要求:
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).java中使用 split方法的时候中间使用的是正则表达式, “.” 不能直接使用,而是要使用 “[.]”进行转换
(2).版本号注意 1.0.0 = 1.0 = 1
代码不是最简便的,但是易于理解
public class solution {
public int compareVersion(String version1, String version2) {
String[] arr1 = version1.split("[.]");
String[] arr2 = version2.split("[.]");
int[] num1 = new int[arr1.length];
int[] num2 = new int[arr2.length];
for(int i = 0; i < arr1.length; i++) {
num1[i] = Integer.parseInt(arr1[i]);
}
for(int i = 0; i < arr2.length; i++) {
num2[i] = Integer.parseInt(arr2[i]);
}
for(int i = 0; i < Math.min(arr1.length, arr2.length); i++) {
if(num1[i] > num2[i]) return 1;
if(num1[i] < num2[i]) return -1;
else continue;
}
if(arr1.length > arr2.length) {
int sum = 0;
for(int i = arr2.length; i < arr1.length; i++) {
sum += num1[i];
}
if(sum == 0) return 0;
else return 1;
}
if(arr1.length < arr2.length) {
int sum = 0;
for(int i = arr1.length; i < arr2.length; i++) {
sum += num2[i];
}
if(sum == 0) return 0;
else return -1;
}
return 0;
}
}
update
学到了一种简单的方法
只是代码比较简单,复杂度并没有降低
public class fix {
public int compareVersion(String version1, String version2) {
String[] arr1 = version1.split("[.]");
String[] arr2 = version2.split("[.]");
int length = Math.max(arr1.length, arr2.length);
for(int i = 0; i < length; i++) {
Integer a1 = i < arr1.length ? Integer.parseInt(arr1[i]) : 0;
Integer a2 = i < arr2.length ? Integer.parseInt(arr2[i]) : 0;
int compare = a1.compareTo(a2);
if(compare != 0) return compare;
}
return 0;
}
}