You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Project Euler #4 最大回文数Java代码输出结果错误求解

代码问题说明

你的代码存在两个核心逻辑错误:

  • 未做回文数大小比对,只要检测到回文就直接返回,无法保证返回值是最大值
  • 提前终止遍历流程,第一个回文命中后就结束了所有循环,没有覆盖所有三位数乘积的组合

你当前的遍历顺序下,第一个命中的回文是999 * 581 = 580085,直接返回自然无法得到更大的正确结果906609。

修正后代码

修正思路为新增变量存储当前最大回文数,遍历所有组合时仅在找到更大的回文时更新存储值,全部遍历完成后再返回结果,还额外增加了剪枝逻辑提升运行效率:

public class Problem4 {

    public static void main(String[] args) {
        System.out.print(largestPalindrome());
    }
    
    static String largestPalindrome () {
        int maxPalindrome = 0;
        for (int j = 999; j > 99; j--) {
            for (int k = 999; k > 99; k--) {
                int product = j * k;
                // 剪枝:当前乘积已小于已知最大回文,后续k更小乘积只会更小,直接结束内层循环
                if (product <= maxPalindrome) {
                    break;
                }
                String s = String.valueOf(product);
                if (palindrome(s)) {
                    maxPalindrome = product;
                }
            }
        }
        return String.valueOf(maxPalindrome);
    }
    
    static boolean palindrome (String s) {
        for(int i = 0; i <= (s.length() / 2); i++) {
            if (s.charAt(i) != s.charAt(s.length()-i-1)) {
                return false;
            }
        }
        return true;
    }
}

内容的提问来源于stack exchange,提问作者Ayoub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:45:04