题解 | #比较版本号#
比较版本号
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类型的转换。