完美整数| 豆包MarsCode AI刷题

108 阅读3分钟

问题描述

题目要求在区间 [x,y][x, y][x,y] 中,统计“完美整数”的个数。
完美整数定义为:该数的所有数字都相同。例如:

  • 完美整数:1, 11, 333
  • 不完美整数:12, 101

思路分析

  1. 数字的构造规律

    • 如果一个数是完美整数,那么将它转化为字符串后,其所有字符应该相同。
    • 遍历区间内的每个数,将其转换为字符串,判断字符串的所有字符是否相等。
  2. 核心判断

    • 将数字转化为字符串 num_str,如果 num_str 中所有字符相同,则为完美整数。
    • 可通过集合去重 set(num_str),若集合长度为 1,则为完美整数。
  3. 边界处理

    • x≤yx \leq yx≤y 且 x,y≥1x, y \geq 1x,y≥1,输入范围均为正整数。

图解流程

  1. 遍历区间中的所有整数:

    • 例如区间 [1,10][1, 10][1,10]:

      • 1, 2, ..., 10
  2. 检查每个整数的构成:

    • 如 11 → 转化为字符串 "11",检查是否所有字符相同。
  3. 如果满足完美整数条件,计数加 1。

  4. 返回计数结果。


优化代码实现

python
复制代码
def solution(x, y):
    count = 0  # 用于计数完美整数的个数
    for num in range(x, y + 1):  # 遍历区间内的每个数
        num_str = str(num)  # 将数字转换为字符串
        # 如果 num_str 转化为集合后长度为 1,说明所有字符相同
        if len(set(num_str)) == 1:
            count += 1
    return count


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

知识总结

  1. 字符串去重判断

    • set():可以用于快速检查字符是否唯一,例如 set("111") 得到 {'1'},长度为 1 表示所有字符相同。
  2. 循环和条件判断

    • 对区间范围内每个数进行判断,使用 range(x, y + 1) 遍历。
  3. 区间问题常见技巧

    • 遍历 + 条件判断是处理简单区间问题的基础方法。
    • 对于更大的区间,需优化算法(如预计算、数学公式等)。

学习计划

1. 制定刷题计划

  • 目标:每天练习 5 道题目,涵盖不同类型(如区间问题、字符串处理、数组操作)。
  • 分类刷题:将题目按照难度和主题分类,如初级问题集中在循环与条件,进阶问题关注数据结构与算法。
  • 记录错题:将错题分类整理,定期复盘错题,理解错误原因并总结对应知识点。

2. 错题复盘方法

  • 使用 豆包MarsCode AI 的解析功能查看错误原因。
  • 针对错题中暴露的薄弱点,查阅相关知识补充练习。

3. 高效学习方法

  • 利用 豆包MarsCode AI 的提示功能快速发现问题,结合解题建议学习代码实现。
  • 对已解决问题进行手动优化,例如将多余的 if 逻辑精简为一行代码。

工具运用

1. 与其他资源结合

  • 学习过程中,遇到概念模糊的问题,可以用 豆包 进行深入讲解。

2. 针对性复习

  • 根据题目难度划分重点,易错题目优先复习。
  • 定期使用 AI 分析代码风格和性能,提升代码质量。

3. 为初学者的建议

  • 从简单问题入手:如遍历与条件判断、基本排序算法。
  • 熟悉工具使用:了解 豆包MarsCode AI 的提示功能及运行结果分析,善于利用工具找到代码问题的核心。

通过这套方法,可以更有体系地提高算法刷题能力!