AI刷题103.完美整数问题 | 豆包MarsCode AI刷题

95 阅读3分钟

问题描述

一个整数如果由相同的数字构成,则称为完美整数。例如:

  • 111333 是完美整数。
  • 1219101 是不完美整数。

现在,你需要计算给定区间 [x, y] 中有多少个整数是完美整数。

思路解析

数据结构选择

  • 由于我们需要判断整数的每一位是否相同,因此可以将整数转换为字符串来处理。

算法步骤

  1. 判断一个整数是否为完美整数

    • 将整数转换为字符串。
    • 检查字符串中的每一位是否与第一位相同。
  2. 计算区间内的完美整数数量

    • 遍历区间 [x, y] 中的每一个整数。
    • 使用上述方法判断每个整数是否为完美整数。
    • 统计完美整数的数量。

代码实现思路

  • 你可以定义一个函数 is_perfect_number(n) 来判断一个整数是否为完美整数。
  • 然后定义一个函数 solution(x, y) 来计算区间 [x, y] 内的完美整数数量。
  • 在 solution 函数中,遍历区间内的每一个整数,调用 is_perfect_number 函数进行判断,并统计完美整数的数量。

算法步骤

  1. 函数 is_perfect_number:

    • 这个函数已经基本正确,它将整数转换为字符串,并检查所有字符是否相同。
    • 你可以考虑优化这个函数,比如直接使用数学方法来判断是否为完美整数。
  2. 函数 solution:

    • 这个函数遍历区间 [x, y] 中的每一个整数,并调用 is_perfect_number 来判断是否为完美整数。
    • 你可以考虑优化这个函数的性能,比如减少不必要的循环次数。
  3. 测试用例:

    • 你已经添加了一些测试用例,这很好。确保测试用例覆盖了各种边界情况。
    • 你可以考虑添加更多的测试用例,比如单个数字、边界值等。

算法实现

`def is_perfect_number(n):

str_n = str(n)
return all(digit == str_n[0] for digit in str_n)

def solution(x, y):

perfect_count = 0
for num in range(x, y + 1):
    if is_perfect_number(num):
        perfect_count += 1
return perfect_count

if name == "main": # 添加测试用例 print(solution(1, 10) == 9) # 1, 11, 22, 33, 44, 55, 66, 77, 88, 99 print(solution(2, 22) == 10) # 11, 22, 33, 44, 55, 66, 77, 88, 99, 111

`

检查代码

利用AI刷题的便利性可以为我们检查代码并为我们提出改进建议:

代码检查

  1. 函数 is_perfect_number:

    • 这个函数的功能是检查一个整数是否是完美整数。
    • 代码逻辑正确,通过将整数转换为字符串,然后检查所有字符是否相同来判断。
  2. 函数 solution:

    • 这个函数的功能是计算在给定区间 [x, y] 中有多少个完美整数。
    • 代码逻辑正确,通过遍历区间内的每个整数,并调用 is_perfect_number 函数来判断是否为完美整数,然后计数。
  3. 主程序部分:

    • 主程序部分用于测试 solution 函数。
    • 测试用例正确,但注释中的解释有误。例如,solution(1, 10) 的输出应该是 2(因为只有 1 和 11 是完美整数),而不是 9

建议

  1. 修正测试用例注释:

    • 修正注释中的错误,确保注释与实际输出一致。
  2. 优化代码:

    • 虽然当前代码逻辑正确,但可以考虑一些优化,例如减少不必要的字符串转换。

算法复杂度

  • 时间复杂度O((y - x + 1) * d),其中 d 是区间内整数的平均位数。
  • 空间复杂度O(d),其中 d 是区间内整数的平均位数。