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

为何回文测试代码对数字10022201会误判为True?

问题排查与修复

核心问题:错误的索引获取逻辑

你的代码里index = x.index(y)是导致误判的关键。str.index()方法返回的是字符第一次出现的索引,而非当前遍历到的字符的索引。以"10022201"为例:

  • 遍历到第3个字符(索引2的'0')时,x.index('0')仍返回1(第一个'0'的位置),而非当前的索引2,这就导致你始终在检查第一个重复字符的位置,跳过了后续本该不匹配的位置,最终错误判定为回文。

其他冗余问题

  • 每次循环都重新生成反转字符串rev = x[::-1],属于重复计算,完全可以提前生成一次;
  • 变量b未初始化,若输入为空字符串会触发报错(当前场景虽不会出现,但属于代码不严谨)。

修复后的代码

方式1:修正原逻辑,正确遍历索引

class Solution():
    def isPalindrome(x):
        if isinstance(x, int):
            x = str(x)
        rev = x[::-1]  # 提前生成反转字符串,仅执行一次
        b = True  # 初始化默认状态为回文
        for index in range(len(x)):  # 直接遍历索引,获取当前位置
            if x[index] != rev[index]:
                b = False
                break
        return b                

x = 10022201
result = Solution.isPalindrome(x)
print(result)  # 输出False,符合预期

方式2:更简洁的Python风格写法

回文判断本质就是对比原字符串和反转字符串是否一致,无需循环:

class Solution():
    def isPalindrome(x):
        if isinstance(x, int):
            x = str(x)
        return x == x[::-1]

x = 10022201
result = Solution.isPalindrome(x)
print(result)  # 输出False

验证

修复后的代码对10022201会正确返回False,对真正的回文数(如12321)返回True,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:14