题解 | #比较版本号#
比较版本号
https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
解决的思路在于,怎么截取每一段 xxx. 内的值,关键在于一个大while和两个嵌套大小while循环。
1、通过一个大while和两个嵌套大小while循环,驱动截取v1和v2的字符串;
2、通过 num = num*10 + s.chatAt(i) - '0',转变成大小进行比较计算。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare (String version1, String version2) {
if (version1 == null && version2 == null) {
return 0;
}
// 获取版本号长度
int n1 = version1.length(), n2 = version2.length();
int dotIndex1 = 0, dotIndex2 = 0;
int i = 0, j = 0;
// 第一个while 驱动两个字符串工作
while (i < n1 || j < n2) {
// 第二个while驱动截取v1点之前的数值
long num1 = 0;
while (i < n1 && version1.charAt(i) != '.') {
num1 = num1 * 10 + version1.charAt(i) - '0';
i++;
}
//跳过version1的点号
i++;
// 第三个while驱动截取v2点之前的数值
long num2 = 0;
while (j < n2 && version2.charAt(j) != '.') {
num2 = num2 * 10 + version2.charAt(j) - '0';
j++;
}
//跳过version2的点号
j++;
//比较截取.号前数字大小,如果相等就要等到下一个点号的值对比
if(num1 > num2) {
return 1;
}
if(num1 < num2) {
return -1;
}
}
return 0;
}
}