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

LeetCode 9回文数:字符串双指针判断写法错误原因排查

转字符串实现回文数判断的逻辑错误排查

问题现象

通过整数转字符串的双指针对比思路实现回文数判断时,两种分支写法结果差异明显:

  • 分支逻辑1:循环内先判断对称位置字符相等,相等则移动左右指针,输入测试用例121时返回false,不符合预期
  • 分支逻辑2:循环内先判断对称位置字符不相等,不相等则直接返回结果,可通过全部测试用例

错误实现代码

class Solution {
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x); //n
        int l = s.length();
        int i = 0;
        int j = l - 1;
        while (i <= j) {
            if (s.charAt(i) == s.charAt(j)) {
                i++;
                j--;
            }
            return false;
        }
        return true;
    }
}

正确实现代码

class Solution {
    public boolean isPalindrome(int x) {
        String s = String.valueOf(x); //n
        int l = s.length();
        int i = 0;
        int j = l - 1;
        while (i <= j) {
            if (s.charAt(i) != s.charAt(j)) {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}

错误根因

错误代码的核心问题是return false语句的作用域错误:

  • 该语句没有被包裹在if判断的分支内,属于while循环体中无条件执行的语句。也就是说不管对称位置的字符是否匹配,只要进入while循环,跑完if块的逻辑后就会直接执行return false终止函数,循环永远只会执行1次,根本不会完成全字符串的对称校验。
  • 以输入121为例:第一次进循环时i=0、j=2,两个位置的字符都是'1',确实满足相等判断,指针会移动到i=1、j=1,随后代码直接跳出if块执行return false,根本不会走到中间位置'2'的校验逻辑,直接返回错误结果。

如果要保留「判断相等再移动指针」的写法,需要把不匹配返回的逻辑放到else分支中,保证只有字符不匹配时才提前返回,修正后的等价写法如下:

while (i <= j) {
    if (s.charAt(i) == s.charAt(j)) {
        i++;
        j--;
    } else {
        return false;
    }
}
return true;

对比正确实现的逻辑:return false完全处于「字符不相等」的if分支内,只有对称位置字符真的不匹配时才会提前终止返回错误;字符匹配时会正常移动指针进入下一轮校验,直到双指针交叉(所有对称位置校验通过)才跳出循环返回true,逻辑完全闭环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:01:58