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

JavaScript回文数判断代码对10的倍数返回结果错误排查

问题根因

你的代码存在4个核心问题,直接导致10的倍数场景判断失效,同时存在隐性逻辑bug:

  • 字符串转换方法调用错误:直接写toString(x)是调用全局顶层toString方法,不会按预期将传入的数字转为对应数字字符串,正确转换应该用实例方法x.toString()或者强制转换方法String(x)。
  • 数组reverse方法的引用逻辑错误:Array.reverse()是原地修改方法,执行后会直接改动原数组的元素顺序,返回值就是原数组本身的引用。你将reverse的返回值赋值给reversedString后,reversedString和splitString实际指向内存中同一个数组,两者的相等判断完全起不到「原内容和反转内容对比」的作用。
  • 引用类型对比逻辑错误:JS里数组是引用类型,哪怕两个独立数组的元素完全一致,直接用==对比时,判断的是两个变量是否指向同一块内存地址,不会对比实际内容,永远无法得到正确的内容对比结果。
  • 边界场景遗漏:所有大于0且是10的倍数的数字,末尾必然是0,而回文数作为合法数字不可能有前导0,因此除0本身外所有10的正整数倍都不可能是回文数,你的代码没有覆盖这个边界判断,叠加前面的引用bug,就会把10、100这类数字误判为回文数。

另外你把负数判断的逻辑放在了字符串转换、反转操作之后,属于逻辑顺序不合理,会多执行无意义的代码。

修正方案

先做边界场景拦截提前返回,再修正字符串转换、数组反转、内容对比的逻辑,修正后可通过所有测试用例,代码如下:

var isPalindrome = function(x) {
    // 提前拦截边界场景:负数、大于0的10的倍数直接返回false
    if (x < 0 || (x > 0 && x % 10 === 0)) {
        return false;
    }
    // 正确将数字转为字符串
    const numStr = String(x);
    // 拆分为字符数组
    const strArr = numStr.split("");
    // 拷贝一份新数组后再反转,避免和原数组共用引用
    const reversedArr = [...strArr].reverse();
    // 两个数组都转回字符串后,对比内容是否一致
    return strArr.join("") === reversedArr.join("");
};

测试用例验证

  • 传入121:原字符串为"121",反转后为"121",返回true,符合预期
  • 传入-121:命中负数拦截规则,返回false,符合预期
  • 传入10:命中「大于0的10的倍数」拦截规则,返回false,符合预期
  • 传入0:不触发拦截,反转后内容一致,返回true,符合预期
  • 传入55:原字符串为"55",反转后为"55",返回true,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:45:42