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

生成两个三位数乘积的回文数列表返回空,求排查及isPalindrome函数问题

问题排查与修复方案

嘿,我来帮你捋捋为啥你的回文数列表是空的,还有你的isPalindrome逻辑可能存在的问题:

1. 最可能的元凶:成员变量digits的复用问题

你把存储数字位的digits定义成了类的成员变量,这会导致一个致命问题:每次判断回文时,这个列表不会自动清空,会累积之前所有数字的位。举个例子:

  • 第一次判断121,digits里存了[1,2,1]
  • 第二次判断123,digits会变成[1,2,1,1,2,3]
    这样的列表肯定不可能是回文,自然会把所有乘积都判定为非回文,最终返回空列表。

修复方法:把digits改成回文判断方法里的局部变量,每次调用时重新初始化:

private boolean isPalindrome(long num) {
    ArrayList<Long> digits = new ArrayList<>(); // 每次调用都新建空列表
    long temp = num;
    // 拆分数字的每一位
    while (temp > 0) {
        digits.add(temp % 10);
        temp /= 10;
    }
    // 双指针判断回文
    int left = 0;
    int right = digits.size() - 1;
    while (left < right) {
        if (!digits.get(left).equals(digits.get(right))) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

2. 检查三位数乘积的遍历逻辑

除了回文判断的问题,还要确认你有没有正确遍历所有三位数组合:

public ArrayList<Long> findPalindromes() {
    ArrayList<Long> pal = new ArrayList<>();
    // 遍历所有三位数,从i=100到999,j从i开始避免重复计算(比如100*200和200*100是同一个乘积)
    for (int i = 100; i <= 999; i++) {
        for (int j = i; j <= 999; j++) {
            long product = (long) i * j; // 注意强转成long,避免int溢出
            if (isPalindrome(product)) {
                pal.add(product);
            }
        }
    }
    return pal;
}

如果你的遍历范围不对(比如只遍历了100到101),或者忘记强转导致溢出,也会出现空列表的情况。

3. 单独测试isPalindrome函数

建议你先单独验证这个函数的正确性,比如手动传入这些值:

  • isPalindrome(121) 应该返回true
  • isPalindrome(12321) 应该返回true
  • isPalindrome(123) 应该返回false
    先确保这个函数工作正常,再去调试遍历逻辑。

关于Stack Overflow提示"帖子主要是代码"的问题

这个是平台的自动检测机制,你只需要在代码之外补充足够的上下文说明:比如你要实现的功能(找两个三位数乘积的回文数)、遇到的具体问题(返回空列表)、你怀疑的点(比如isPalindrome函数可能有问题),这样就能通过检测啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:23:04