描述
比较版本号,版本号按.分割,例如1.02.11,0.1,0.2,忽略前导0
- version1>version2返回1
- version1<version2返回-1
- version1==version2返回0
示例:
- 1.1==1.1.0
- 1.1==1.01
思路1:split分割数组,按块比较
空间复杂度O(m+n)
public class Solution {
public int compare(String version1, String version2) {
//需要转义
String[] arr1 = version1.split("\\.");
String[] arr2 = version2.split("\\.");
int len1 = arr1.length;
int len2 = arr2.length;
int i = 0;
while(i < len1 || i < len2) {
//为空的话使用0占位
int num1 = i < len1 ? Integer.parseInt(arr1[i]) : 0;
int num2 = i < len2 ? Integer.parseInt(arr2[i]) : 0;
if(num1 > num2) {
return 1;
} else if(num2 > num1){
return -1;
}
i++;
}
return 0;
}
}
思路2:双指针
使用双指针,动态计算每一块版本号的值,空间复杂度O(1)
public class Solution {
public int compare(String version1, String version2) {
int len1 = version1.length();
int len2 = version2.length();
int i = 0;
int j = 0;
while(i < len1 || j < len2) {
//重置新块为0
int num1 = 0;
int num2 = 0;
//计算一块的版本
while(i < len1 && version1.charAt(i) != '.') {
num1 = num1 * 10 + (version1.charAt(i) - '0');
i++;
}
while(j < len2 && version2.charAt(j) != '.') {
num2 = num2 * 10 + (version2.charAt(j) - '0');
j++;
}
if(num1 > num2) {
return 1;
} else if(num2 > num1){
return -1;
}
i++;
j++;
}
return 0;
}
}
思路3
给每一块版本号补前导0,使得两个版本号字符串长度相等,再进行比较。
如果int越界,可以比较字符串ASCII码
例如:
- 1.2和1.11,给1.2补前导0,转成1.02和1.11比较,102<111