完美整数计数问题
问题描述
一个整数如果由相同的数字构成,则称为完美整数。例如:
1、11、333是完美整数。12、19、101是不完美整数。
现在,你需要计算给定区间 ([x, y]) 中有多少个整数是完美整数。
输入:
x和y:两个整数,表示区间的起始和结束位置。
输出:
- 返回区间 ([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。
- 输入:
思路解析
这个问题可以通过遍历区间内的每个整数,并检查其是否为完美整数来解决。具体步骤如下:
-
定义完美整数:
- 一个整数如果由相同的数字构成,则称为完美整数。例如,
11、222、3333等都是完美整数。
- 一个整数如果由相同的数字构成,则称为完美整数。例如,
-
遍历区间:
- 从
x到y遍历每个整数,检查其是否为完美整数。 - 如果是完美整数,则计数器加一。
- 从
-
判断完美整数:
- 将整数转换为字符串,然后检查字符串中的所有字符是否相同。
- 如果所有字符都相同,则该整数是完美整数。
-
优化:
- 可以通过提前终止循环或使用更高效的算法来减少不必要的计算,但在这个问题中,直接遍历的方法已经足够高效。
代码解答
下面是详细的 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
}
}
代码详解
-
主函数
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的值。
- 初始化一个计数器
-
辅助方法
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。
- 将整数
-
主函数
main:public static void main(String[] args) { // 测试用例 System.out.println(solution(1, 10) == 9); // true System.out.println(solution(2, 22) == 10); // true }- 包含一些测试用例,用于验证
solution方法的正确性。
- 包含一些测试用例,用于验证