问题描述
题目要求在区间 [x,y][x, y][x,y] 中,统计“完美整数”的个数。
完美整数定义为:该数的所有数字都相同。例如:
- 完美整数:1, 11, 333
- 不完美整数:12, 101
思路分析
-
数字的构造规律:
- 如果一个数是完美整数,那么将它转化为字符串后,其所有字符应该相同。
- 遍历区间内的每个数,将其转换为字符串,判断字符串的所有字符是否相等。
-
核心判断:
- 将数字转化为字符串
num_str,如果num_str中所有字符相同,则为完美整数。 - 可通过集合去重
set(num_str),若集合长度为 1,则为完美整数。
- 将数字转化为字符串
-
边界处理:
- x≤yx \leq yx≤y 且 x,y≥1x, y \geq 1x,y≥1,输入范围均为正整数。
图解流程
-
遍历区间中的所有整数:
-
例如区间 [1,10][1, 10][1,10]:
- 1, 2, ..., 10
-
-
检查每个整数的构成:
- 如 11 → 转化为字符串 "11",检查是否所有字符相同。
-
如果满足完美整数条件,计数加 1。
-
返回计数结果。
优化代码实现
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
知识总结
-
字符串去重判断:
set():可以用于快速检查字符是否唯一,例如set("111")得到{'1'},长度为 1 表示所有字符相同。
-
循环和条件判断:
- 对区间范围内每个数进行判断,使用
range(x, y + 1)遍历。
- 对区间范围内每个数进行判断,使用
-
区间问题常见技巧:
- 遍历 + 条件判断是处理简单区间问题的基础方法。
- 对于更大的区间,需优化算法(如预计算、数学公式等)。
学习计划
1. 制定刷题计划
- 目标:每天练习 5 道题目,涵盖不同类型(如区间问题、字符串处理、数组操作)。
- 分类刷题:将题目按照难度和主题分类,如初级问题集中在循环与条件,进阶问题关注数据结构与算法。
- 记录错题:将错题分类整理,定期复盘错题,理解错误原因并总结对应知识点。
2. 错题复盘方法
- 使用 豆包MarsCode AI 的解析功能查看错误原因。
- 针对错题中暴露的薄弱点,查阅相关知识补充练习。
3. 高效学习方法
- 利用 豆包MarsCode AI 的提示功能快速发现问题,结合解题建议学习代码实现。
- 对已解决问题进行手动优化,例如将多余的
if逻辑精简为一行代码。
工具运用
1. 与其他资源结合
- 学习过程中,遇到概念模糊的问题,可以用 豆包 进行深入讲解。
2. 针对性复习
- 根据题目难度划分重点,易错题目优先复习。
- 定期使用 AI 分析代码风格和性能,提升代码质量。
3. 为初学者的建议
- 从简单问题入手:如遍历与条件判断、基本排序算法。
- 熟悉工具使用:了解 豆包MarsCode AI 的提示功能及运行结果分析,善于利用工具找到代码问题的核心。
通过这套方法,可以更有体系地提高算法刷题能力!