题目分析:寻找区间内的完美整数(AI刷题103)| 豆包MarsCode AI刷题;

33 阅读2分钟

题目分析:寻找区间内的完美整数

什么是完美整数? 完美整数的定义非常直观:一个整数由完全相同的数字构成。例如:

1、11、222 是完美整数。 19、101、123 则不是完美整数。 题目目标:在区间 [x, y] 中,统计所有完美整数的个数。

解题思路与分析

  1. 问题拆解 本题的核心是判断一个数字是否是由相同的数字构成。

如何判断数字的构成?

将数字逐位分解:获取个位、十位、百位等每一位的数字。 比较所有位是否相同。如果某一位与其他位不同,则该数字不是完美整数。 如何遍历区间?

从 x 遍历到 y,逐个判断每个数字是否是完美整数。 累计满足条件的数字个数。 2. 算法设计 数字分解

使用取模和整除操作: num % 10 获取当前数字的个位。 num /= 10 移除数字的个位,继续判断下一位。 如果在分解过程中发现某位数字与其他位不同,立即结束判断,跳过该数字。 区间遍历

遍历 [x, y] 的所有整数,对每个整数调用判断函数。 使用计数器记录符合条件的整数个数。 3. 时间复杂度分析 假设区间长度为 L = y - x + 1,数字长度为 d。 每次判断需要 O(d) 时间,总时间复杂度为 O(L * d)。 4. 边界情况 单位数字(如 1-9)都是完美整数,直接计数即可。 如果 x > y(非法区间),返回结果为 0。

bool isPerfectNumber(int num) {
    int lastDigit = num % 10; // 获取个位数字
    num /= 10; // 去掉个位数字
    while (num > 0) {
        int currentDigit = num % 10; // 当前的个位数字
        if (currentDigit != lastDigit) {
            return false; // 若有一位不同,则不是完美整数
        }
        num /= 10; // 去掉当前个位
    }
    return true; // 所有位都相同,则是完美整数
}

感悟与总结

这道题目表面简单,但数字分解和逻辑判断过程中仍有许多细节需要处理。通过逐位分析数字构造,我们更深刻理解了数字操作的基本技巧。

本题的最大收获在于:

数字分解和模式识别:掌握了如何逐位分析数字,并根据特定规则快速判断其特性。 边界条件的严谨性:确保代码处理了所有可能的特殊情况,如非法区间、单个数字的判断等。 写这段代码的过程让我意识到,数学逻辑在编程中的应用非常重要,而对问题的分解和优化,是提升代码效率和质量的关键所在。