青训营X豆包MarsCode 技术训练营第二课 | 豆包MarsCode AI 刷题

44 阅读2分钟

本文将对一段Java代码进行解析,该代码的目的是在给定的整数范围内找出所有“强整数”。所谓“强整数”,是指可以由两个不同正整数x和y的幂次之和构成的整数。具体地,对于任意非负整数i和j(i, j ≥ 0),若存在xj在某个给定范围m内,则该整数被认为是“强整数”。

代码结构

代码主要由两个部分组成:solution方法和main方法。

  • solution方法:接受三个整数参数x, y, m,并返回一个整数数组,包含所有在范围0到m内的“强整数”。
  • main方法:包含几个测试用例,用于验证solution方法的正确性。

solution方法解析

  1. 初始化布尔数组

    • 创建一个布尔数组strongIntegers,长度为m + 1,用于标记每个整数是否为“强整数”。初始时,所有元素均为false
  2. 计算x的幂次

    • 使用一个外层循环,计算x的所有幂次(从x^0开始),直到x的幂次大于m为止。
  3. 计算y的幂次

    • 对于x的每一个幂次,使用内层循环计算y的所有幂次(从y^0开始),并检查x的当前幂次加上y的当前幂次是否小于等于m。
    • 如果条件满足,将结果标记为truestrongIntegers数组中,表示该整数是一个“强整数”。
    • 特别地,如果y等于1,为了避免死循环(因为1的任何正整数次幂都是1),内层循环会在第一次迭代后终止。
  4. 处理x等于1的情况

    • 同理,如果x等于1,为了避免死循环,外层循环会在第一次迭代后终止。
  5. 收集结果

    • 遍历strongIntegers数组,计算true值的数量(即“强整数”的数量),并据此创建一个新的整数数组resultArray
    • 再次遍历strongIntegers数组,将所有标记为true的索引值(即“强整数”)收集到resultArray中。
  6. 返回结果

    • 返回包含所有“强整数”的数组resultArray

main方法解析

main方法包含四个测试用例,分别验证了不同x, y, m组合下solution方法的正确性。每个测试用例都使用Arrays.equals方法来比较solution方法的输出和预期结果,从而验证方法的准确性。

总结

本段Java代码通过嵌套循环和布尔数组高效地解决了在给定范围内找出所有“强整数”的问题。代码结构清晰,逻辑严谨,通过合理的边界条件处理避免了潜在的死循环问题。测试用例验证了代码的正确性和鲁棒性,展示了其在不同输入条件下的表现。