生成两个三位数乘积的回文数列表返回空,求排查及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)应该返回trueisPalindrome(12321)应该返回trueisPalindrome(123)应该返回false
先确保这个函数工作正常,再去调试遍历逻辑。
关于Stack Overflow提示"帖子主要是代码"的问题
这个是平台的自动检测机制,你只需要在代码之外补充足够的上下文说明:比如你要实现的功能(找两个三位数乘积的回文数)、遇到的具体问题(返回空列表)、你怀疑的点(比如isPalindrome函数可能有问题),这样就能通过检测啦。
内容的提问来源于stack exchange,提问作者mendokusai
相关产品推荐
相关产品推荐

