唉,今天想抽出时间太难了。。。
这道题让自己有了新知,对于点‘.’的字符串拆分要特殊处理
String[] str1 = version1.split("\\.");
发现leetcode的测试数据不全面,存在一个Bug,自己最下面的提交有错误,在处理1.23.1和2.3时,返回了1,而非-1.
从新写code,还是走了第一次的方法最后。
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null || version1.length() == 0 || version2.length() == 0 || version1.equals(version2)) {
return 0;
}
String[] str1 = version1.split("\\.");
String[] str2 = version2.split("\\.");
int i = 0;
for (; i < str1.length && i < str2.length; i++) {
int v1 = Integer.valueOf(str1[i]);
int v2 = Integer.valueOf(str2[i]);
if (v1 > v2) {
return 1;
} else if (v1 < v2) {
return -1;
}
}
if (str1.length > str2.length) {
for (; i < str1.length; i++) {
int v1 = Integer.valueOf(str1[i]);
if (v1 > 0) {
return 1;
}
}
} else if (str1.length < str2.length) {
for (; i < str2.length; i++) {
int v2 = Integer.valueOf(str2[i]);
if (v2 > 0) {
return -1;
}
}
}
return 0;
}
//另外,第一次的错误,问题出在了最后部分,简单的判断长度,会错判1.0和1的比较。
public class Solution {
public int compareVersion(String version1, String version2) {
if (version1 == null || version2 == null || version1.length() == 0 || version2.length() == 0 || version1.equals(version2)) {
return 0;
}
//String[] str1 = version1.split(".");
//String[] str2 = version2.split(".");
String[] str1 = version1.split("\\.");
String[] str2 = version2.split("\\.");
int length = Math.max(str1.length, str2.length);
//for (int i = 0; i < str1.length && i < str2.length; i++) {
int sum1 = 0, sum2 = 0;
for (int i = 0; i < length; i++) {
if (i < str1.length) {
sum1 = (sum1 + Integer.valueOf(str1[i]))*10;
} else {
sum1 = (sum1)*10;
}
if (i < str2.length) {
sum2 = (sum2 + Integer.valueOf(str2[i]))*10;
} else {
sum2 = (sum2)*10;
}
// if (v1 > v2) {
// return 1;
// } else if (v1 < v2) {
// return -1;
// }
}
if (sum1 > sum2) {
return 1;
} else if (sum1 < sum2){
return -1;
} else {
return 0;
}
}
}