为何回文测试代码对数字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
相关产品推荐
相关产品推荐

