青训营伴学笔记(2)

104 阅读3分钟

伴学笔记:理解与实现“完美整数”问题

问题背景

在编程练习中,我们经常会遇到需要处理数字的问题。今天,我们将探讨一个有趣的问题:如何判断一个整数是否由相同的数字构成,并计算给定区间内有多少个这样的整数。我们将这个问题称为“完美整数”问题。

问题描述

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

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

我们需要编写一个函数 solution(x, y),计算给定区间 [x, y] 中有多少个整数是完美整数。

解题思路

  1. 理解问题

    • 首先,我们需要明确什么是“完美整数”。完美整数的特点是所有数字都相同。
    • 例如,111 是完美整数,因为它的所有数字都是 1
  2. 数据结构选择

    • 为了方便检查每个数字是否相同,我们可以将整数转换为字符串。这样,我们可以逐个字符进行比较。
  3. 算法步骤

    • 遍历区间 [x, y]:我们需要遍历从 xy 的所有整数。
    • 检查每个整数是否为完美整数:对于每个整数,将其转换为字符串,并检查字符串中的所有字符是否相同。
    • 统计完美整数的数量:如果某个整数是完美整数,则增加计数器。

代码实现

以下是实现 solution 函数的代码框架:

def solution(x, y):
    count = 0  # 用于统计完美整数的数量
    
    for num in range(x, y + 1):
        # 将整数转换为字符串,方便检查每个字符是否相同
        num_str = str(num)
        
        # 检查字符串中的所有字符是否相同
        if all(char == num_str[0] for char in num_str):
            count += 1
    
    return count

if __name__ == "__main__":
    # 测试用例
    print(solution(1, 10) == 9)
    print(solution(2, 22) == 10)

关键步骤解释

  1. 遍历区间 [x, y]

    • 使用 for num in range(x, y + 1) 来遍历从 xy 的所有整数。
  2. 检查每个整数是否为完美整数

    • 将整数转换为字符串 num_str,然后使用 all(char == num_str[0] for char in num_str) 来检查字符串中的所有字符是否相同。
    • all() 函数用于检查所有元素是否为 True。如果所有字符都相同,则返回 True
  3. 统计完美整数的数量

    • 如果条件满足,则增加 count 计数器。

测试与验证

在编写代码后,我们需要通过测试用例来验证代码的正确性。以下是一些测试用例:

  • solution(1, 10) 应该返回 9,因为区间 [1, 10] 中有 9 个完美整数(1, 2, 3, 4, 5, 6, 7, 8, 9)。
  • solution(2, 22) 应该返回 10,因为区间 [2, 22] 中有 10 个完美整数(2, 3, 4, 5, 6, 7, 8, 9, 11, 22)。

总结

通过这个练习,我们学会了如何判断一个整数是否由相同的数字构成,并计算给定区间内有多少个这样的整数。这个问题的解决思路可以推广到其他类似的数字处理问题中。

在编写代码时,我们使用了字符串操作来简化数字的比较,并通过遍历区间来统计完美整数的数量。这种思路不仅适用于这个问题,还可以用于其他需要处理数字的编程任务。

希望这篇伴学笔记能帮助你更好地理解这个问题,并在未来的编程练习中应用类似的思路。继续加油!