题解 | #比较版本号#
比较版本号
https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
public int compare (String version1, String version2) {
// write code
int i, j; // 字符串指针
int n1, n2;
i = 0;
j = 0;
n1 = version1.length();
n2 = version2.length();
while(i<n1 || j<n2){
long num1=0;
while(i < n1 && version1.charAt(i) != '.'){
num1 = num1 * 10 + version1.charAt(i++) - '0';
}
i++;
long num2=0;
while(j < n2 && version2.charAt(j) != '.'){
num2 = num2 * 10 + version2.charAt(j++) - '0';
}
j++;
if(num1>num2) return 1;
else if (num1<num2) return -1;
}
return 0;
}
}
几个trick:
1,里面用到的num1 = num1 * 10 + version1.charAt(i++) - '0'; 中,使用不断的乘10累积来避免0开头的版本号的情况的考虑。
2,version1.charAt(i++) - '0' 是剪掉了‘0’的unicode值,从而完成对字符类型到数字int类型的转换。
查看14道真题和解析