【问题描述】
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
【思路】
首先考虑以.分离两端的字符串,然后进行比较。
public class Solution {
public int compareVersion(String version1, String version2) {
int ver1Main = 0;
int ver1Sub = 0;
int ver2Main = 0;
int ver2Sub = 0;
String[] ver1 = version1.split("\\.");
if (ver1.length == 1) {
ver1Main = Integer.parseInt(ver1[0]);
} else {
ver1Main = Integer.parseInt(ver1[0]);
ver1Sub = Integer.parseInt(ver1[1]);
}
String[] ver2 = version2.split("\\.");
if (ver2.length == 1) {
ver2Main = Integer.parseInt(ver2[0]);
} else {
ver2Main = Integer.parseInt(ver2[0]);
ver2Sub = Integer.parseInt(ver2[1]);
}
if (ver1Main == ver2Main) {
return ver1Sub > ver2Sub ? 1 : (ver1Sub < ver2Sub ? -1 : 0);
} else {
return ver1Main > ver2Main ? 1 : (ver1Main < ver2Main? -1 : 0);
}
}
}
但是此种情况下没有考虑第三级子版本号,所以会报错。
【思路2】
考虑多级版本号,用数组存储。
【code】
public class Solution {
public int compareVersion(String version1, String version2) {
int v1 = 0;
int v2 = 0;
String[] ver1 = version1.split("\\.");
String[] ver2 = version2.split("\\.");
int len = Math.min(ver1.length, ver2.length);
for (int i = 0; i < len; i++) {
v1 = Integer.parseInt(ver1[i]);
v2 = Integer.parseInt(ver2[i]);
if (v1 > v2) {
return 1;
} else if (v1 < v2) {
return -1;
} else {
continue;
}
}
if (ver1.length > len) {
for (int i = len; i < ver1.length; i++) {
if (Integer.parseInt(ver1[i]) > 0) {
return 1;
}
}
} else if (ver2.length > len) {
for (int i = len; i < ver2.length; i++) {
if (Integer.parseInt(ver2[i]) > 0) {
return -1;
}
}
}
return 0;
}
}