我正在处理一道面试题,要求我编写一个程序来查找两个三位数的乘积中最大的回文数。
这是问题的描述。
我想到了从下往上的暴力方法。
public class LargestPalindromeQuestion {
public static void main(String[] args) {
int value = 0;
for (int i = 100; i <= 999; i++) {
for (int j = i; j <= 999; j++) {
int value1 = i * j;
if (isPalindrome(value1) && value < value1) {
value = value1;
}
}
}
System.out.println(value);
}
private static boolean isPalindrome(final int product) {
int p = product;
int reverse = 0;
while (p != 0) {
reverse *= 10;
reverse += p % 10;
p /= 10;
}
return reverse == product;
}
}
他们问我在这个程序中可以做哪些优化?我提到我们可以尝试剪枝搜索空间并优化每个搜索空间中项目的检查步骤,但我现在不确定如何在上面的解决方案中实现这一点。
在这个程序中我们可以做哪些优化?目前它需要执行810000
步才能找到最大的回文数。
我们可以执行的最少步骤是多少,才能找到两个三位数中最大的回文数?