您的位置:首页 > 其它

Compare Version Numbers

2016-06-09 06:22 225 查看
唉,今天想抽出时间太难了。。。

这道题让自己有了新知,对于点‘.’的字符串拆分要特殊处理

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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: