思路:
- “.” 把version分割成多个chunks,两个version对应位置上的chunk进行大小比较即可。
- 如果两个version的chunks不一样多,那么短的那个补0就行。
方法一(最优解):
class Solution {
public int compareVersion(String version1, String version2) {
int i = 0, j = 0;
int l1 = version1.length(), l2 = version2.length();
while (i < l1 || j < l2) {
int n1 = 0, n2 = 0;//超长就不走while了,直接=0
while (i < l1 && version1.charAt(i) != '.') {//不用加'.' i < l1就ok
n1 = n1 * 10 + version1.charAt(i) -'0';
i++;
}
while (j < l2 && version2.charAt(j) != '.') {
n2 = n2 * 10 + version2.charAt(j) -'0';
j++;
}
if (n1 > n2) {
return 1;
} else if (n1 < n2) {
return -1;
} //如果这里else return0,像1.0.0.5 1.0这样的不好判断
i++;//别忘了
j++;
}
//v1 v2相同,跳出循环。
return 0;
}
}
方法二 :split
class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
int i = 0, j = 0;
int l1 = v1.length, l2 = v2.length;
while (i < l1 || j < l2) {
//自动去除前导0
int n1 = i < l1 ? Integer.parseInt(v1[i]) : 0;//如果到头了,后面补零
int n2 = j < l2 ? Integer.parseInt(v2[j]) : 0;//如果到头了,后面补零
if (n1 > n2) {
return 1;
} else if (n1 < n2) {
return -1;
}
i++;
j++;
}
//v1 v2相同,跳出循环。
return 0;
}
}
方法三:substring
class Solution {
public int compareVersion(String version1, String version2) {
String v1 = version1 + ".";//用substring,一定要加
String v2 = version2 + ".";
int i = 0, j = 0, pre1 = 0, pre2 = 0;
int l1 = v1.length(), l2 = v2.length();
while (i < l1 || j < l2) {
while (i < l1 && v1.charAt(i) != '.') {
i++;
}
while (j < l2 && v2.charAt(j) != '.') {
j++;
}
//自动去除前导0
int n1 = i < l1 ? Integer.parseInt(v1.substring(pre1, i)) : 0;//如果到头了,后面补零
int n2 = j < l2 ? Integer.parseInt(v2.substring(pre2, j)) : 0;//如果到头了,后面补零
if (n1 > n2) {
return 1;
} else if (n1 < n2) {
return -1;
}
i++;
j++;
pre1 = i;
pre2 = j;
}
//v1 v2相同,跳出循环。
return 0;
}
}