题解 | #比较版本号#

比较版本号

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类型的转换。

全部评论
另外,官方题解中的注释有误,while(i
点赞 回复 分享
发布于 2023-09-13 10:43 广东

相关推荐

不愿透露姓名的神秘牛友
昨天 13:47
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务