我正在接受一个面试问题,在这个问题上我被问到应该写一个程序来从两个三位数字的乘积中找到最大的回文。从两个三位数的乘积中优化最大回文数?
这里是question
我想出了从底部开始这种强制方法。
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
步骤来找到最大的回文。
我们可以通过两个三位数字找到最大回文数的步数最少是多少?
这可能帮助(我只是工作的同样的问题,所以我还没有读过)http://www.mathblog.dk/project-euler-problem -4/ – Paul
假设前导零不允许成为回文的一部分,任何以0结尾的数字都不能成为回文。因此,您可以跳过i和j的所有值,其中i%10 == 0或j%10 == 0,因为乘以以0结尾的值会得出以0结尾的结果。 – samgak