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

63 阅读3分钟

完美整数计数问题

问题描述

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

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

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

输入

  • xy:两个整数,表示区间的起始和结束位置。

输出

  • 返回区间 ([x, y]) 内完美整数的数量。

示例

  • 样例1

    • 输入:x = 1, y = 10
    • 输出:9
    • 解释:区间 ([1, 10]) 内的完美整数有:1, 2, 3, 4, 5, 6, 7, 8, 9
  • 样例2

    • 输入:x = 2, y = 22
    • 输出:10
    • 解释:区间 ([2, 22]) 内的完美整数有:2, 3, 4, 5, 6, 7, 8, 9, 11, 22

思路解析

这个问题可以通过遍历区间内的每个整数,并检查其是否为完美整数来解决。具体步骤如下:

  1. 定义完美整数

    • 一个整数如果由相同的数字构成,则称为完美整数。例如,112223333 等都是完美整数。
  2. 遍历区间

    • xy 遍历每个整数,检查其是否为完美整数。
    • 如果是完美整数,则计数器加一。
  3. 判断完美整数

    • 将整数转换为字符串,然后检查字符串中的所有字符是否相同。
    • 如果所有字符都相同,则该整数是完美整数。
  4. 优化

    • 可以通过提前终止循环或使用更高效的算法来减少不必要的计算,但在这个问题中,直接遍历的方法已经足够高效。

代码解答

下面是详细的 Java 代码实现,包括对每个步骤的详细解释。

public class Main {
    public static int solution(int x, int y) {
        int count = 0;
        for (int i = x; i <= y; i++) {
            if (isPerfectNumber(i)) {
                count++;
            }
        }
        return count;
    }

    // 判断一个整数是否是完美整数
    private static boolean isPerfectNumber(int num) {
        String numStr = String.valueOf(num);
        // 获取第一个字符
        char firstChar = numStr.charAt(0);
        // 检查字符串中的所有字符是否相同
        for (int i = 1; i < numStr.length(); i++) {
            if (numStr.charAt(i) != firstChar) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        // 测试用例
        System.out.println(solution(1, 10) == 9); // true
        System.out.println(solution(2, 22) == 10); // true
    }
}

代码详解

  1. 主函数 solution

    public static int solution(int x, int y) {
        int count = 0;
        for (int i = x; i <= y; i++) {
            if (isPerfectNumber(i)) {
                count++;
            }
        }
        return count;
    }
    
    • 初始化一个计数器 count 用于记录完美整数的数量。
    • 使用 for 循环遍历区间 ([x, y]) 内的每个整数。
    • 调用 isPerfectNumber 方法检查当前整数是否为完美整数。
    • 如果是完美整数,则计数器 count 加一。
    • 最后返回计数器 count 的值。
  2. 辅助方法 isPerfectNumber

    private static boolean isPerfectNumber(int num) {
        String numStr = String.valueOf(num);
        // 获取第一个字符
        char firstChar = numStr.charAt(0);
        // 检查字符串中的所有字符是否相同
        for (int i = 1; i < numStr.length(); i++) {
            if (numStr.charAt(i) != firstChar) {
                return false;
            }
        }
        return true;
    }
    
    • 将整数 num 转换为字符串 numStr
    • 获取字符串的第一个字符 firstChar
    • 使用 for 循环遍历字符串中的每个字符,检查它们是否与 firstChar 相同。
    • 如果发现任何字符与 firstChar 不同,则返回 false
    • 如果所有字符都相同,则返回 true
  3. 主函数 main

    public static void main(String[] args) {
        // 测试用例
        System.out.println(solution(1, 10) == 9); // true
        System.out.println(solution(2, 22) == 10); // true
    }
    
    • 包含一些测试用例,用于验证 solution 方法的正确性。