1. 题目
2. 思路
(1) 模拟法
- 首先将版本号分割,再对齐修订号的个数,比较修订号时先去掉前导0,然后逐位比较即可。
- 注意按’.'分割字符串时需要加上转义字符。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* <p>
* 比较版本号
*
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare(String version1, String version2) {
String[] split1 = version1.split("\\.");
String[] split2 = version2.split("\\.");
int n1 = split1.length;
int n2 = split2.length;
if (n1 > n2) {
String[] temp = new String[n1];
for (int i = 0; i < n2; i++) {
temp[i] = split2[i];
}
for (int i = n2; i < n1; i++) {
temp[i] = "0";
}
split2 = temp;
} else if (n1 < n2) {
String[] temp = new String[n2];
for (int i = 0; i < n1; i++) {
temp[i] = split1[i];
}
for (int i = n1; i < n2; i++) {
temp[i] = "0";
}
split1 = temp;
}
int n = Math.max(n1, n2);
int index = 0;
while (index < n) {
char[] chars1 = split1[index].toCharArray();
char[] chars2 = split2[index].toCharArray();
int m1 = chars1.length;
int m2 = chars2.length;
int p1 = 0;
int p2 = 0;
while (p1 < m1 && chars1[p1] == '0') {
p1++;
}
while (p2 < m2 && chars2[p2] == '0') {
p2++;
}
if (m1 - p1 > m2 - p2) {
return 1;
} else if (m1 - p1 < m2 - p2) {
return -1;
} else {
while (p1 < m1) {
if (chars1[p1] > chars2[p2]) {
return 1;
} else if (chars1[p1] < chars2[p2]) {
return -1;
} else {
p1++;
p2++;
}
}
}
index++;
}
return 0;
}
}