AI刷题:版本号比较 | 豆包MarsCode AI刷题

32 阅读3分钟

AI刷题:版本号比较 | 豆包MarsCode AI刷题

题面

image.png

代码结构

  1. 主类和主方法:

    java
    代码解读
    复制代码
    public class Main {
        public static void main(String[] args) {
            // 测试用例
            System.out.println(solution("0.2.1", "0.1.1"));
            System.out.println(solution("1.0.1", "1") == 1);
            System.out.println(solution("7.5.2.4", "7.5.3") == -1);
            System.out.println(solution("1.0", "1.0.0") == 0);
        }
    }
    
    • Main 类包含一个 main 方法,用于执行程序。
    • 在 main 方法中,调用 solution 方法并打印结果,测试不同的版本号比较。
  2. 版本比较方法:

    java
    代码解读
    复制代码
    public static int solution(String version1, String version2) {
        String[] v1 = version1.split("\.");
        String[] v2 = version2.split("\.");
        for (int i = 0; i < v1.length || i < v2.length; ++i) {
            int x = 0, y = 0;
            if (i < v1.length) {
                x = Integer.parseInt(v1[i]);
            }
            if (i < v2.length) {
                y = Integer.parseInt(v2[i]);
            }
            if (x > y) {
                return 1;
            }
            if (x < y) {
                return -1;
            }
        }
        return 0;
    }
    

详细讲解

  1. 输入参数:

    • version1 和 version2 是两个字符串,表示要比较的版本号。
  2. 分割版本号:

    java
    代码解读
    复制代码
    String[] v1 = version1.split("\.");
    String[] v2 = version2.split("\.");
    
    • 使用 split("\.") 方法将版本号字符串按点号分割成数组。每个数组元素对应一个修订号。
  3. 比较修订号:

    java
    代码解读
    复制代码
    for (int i = 0; i < v1.length || i < v2.length; ++i) {
        int x = 0, y = 0;
        if (i < v1.length) {
            x = Integer.parseInt(v1[i]);
        }
        if (i < v2.length) {
            y = Integer.parseInt(v2[i]);
        }
        if (x > y) {
            return 1;
        }
        if (x < y) {
            return -1;
        }
    }
    
    • 使用 for 循环遍历修订号,循环条件是 i < v1.length || i < v2.length,这意味着只要有一个版本号还有修订号未比较,就继续循环。

    • 在每次循环中,初始化 x 和 y 为 0。然后根据当前索引 i,从 v1 和 v2 中提取修订号并转换为整数。

    • 比较两个修订号:

      • 如果 x > y,返回 1,表示 version1 更新。
      • 如果 x < y,返回 -1,表示 version2 更新。
  4. 返回相等结果:

    java
    代码解读
    复制代码
    return 0;
    
    • 如果所有修订号都相等,循环结束后返回 0,表示两个版本号相同。

能力提升

1. 字符串处理能力

  • 分割字符串:使用 split("\.") 方法将版本号字符串按点(.)分割成数组。这要求对字符串操作有一定的理解,尤其是正则表达式的使用。
  • 数组操作:将分割后的字符串数组进行遍历,处理每个版本号的各个部分。

2. 数字转换能力

  • 字符串转整数:使用 Integer.parseInt() 方法将字符串转换为整数。这是处理版本号比较时的关键步骤,因为版本号的每一部分都需要作为数字进行比较。

3. 控制流与逻辑思维

  • 循环与条件判断:使用 for 循环遍历版本号的每一部分,并通过 if 语句进行条件判断,比较两个版本号的大小。这锻炼了对控制流的理解和逻辑思维能力。
  • 处理不同长度的版本号:代码能够处理不同长度的版本号(例如 "1.0" 和 "1.0.0"),这需要考虑到数组的边界条件。

4. 方法设计与返回值

  • 方法的设计:定义了一个 solution 方法,接受两个版本号字符串作为参数,并返回比较结果。这锻炼了方法的设计能力和函数式编程的思维。
  • 返回值的使用:通过返回值来表示比较结果(1 表示第一个版本号更大,-1 表示第二个版本号更大,0 表示相等),这要求对函数返回值的意义有清晰的理解。

5. 测试与验证

  • 测试用例的设计:在 main 方法中,设计了多个测试用例来验证 solution 方法的正确性。这锻炼了对代码测试和验证的能力,能够帮助开发者确保代码的功能符合预期。

总结

此题锻炼了字符串处理、数字转换、控制流、方法设计和测试验证等多方面的编程能力。通过理解和实现这段代码,开发者可以提高自己的编程技能,尤其是在处理字符串和数组时的能力。