从两个三位数的乘积优化最大的回文?

joh*_*ohn 5 java algorithm optimization palindrome

我正在处理一个面试问题,我被问到这个问题,我应该编写一个程序,从两个三位数字的产品中找到最大的回文.

这是个问题

我想出了这种从底部开始的蛮力方法.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

他们问我在这个项目中可以做些什么?我提到我们可以尝试修剪搜索空间并优化搜索空间中每个项目的检查步骤,但后来我很困惑如何在上面的解决方案中完成这项工作?

我们在这个计划中可以做些什么?现在它正在执行810000寻找最大回文的步骤.

我们可以用两个三位数找到最大回文的最少步数是多少?

小智 1

一种非常简单的优化方法是从最大的 3 位数字而不是最小的数字开始。因为解很可能更接近 (999 , 999) 而不是 (100 , 100)。

  • 如果你从999倒数i到100,找到回文数后就可以断点,而i * 999小于你找到的最高回文数,因为之后就不可能找到更高的回文数了。如果 j 正在倒计时,一旦 i * j 小于迄今为止找到的最高值,您也可以中断内部循环(但不能中断外部循环) (2认同)