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

回文数检查的空间优化问题:代码分析与优化方案请求

回文数检查的空间优化分析与实现

原代码分析

你的代码逻辑是成立的:先排除负数,再通过反转整个数字与原数比较来判断是否为回文。但它存在两处可优化的点:

  1. 溢出与类型冗余:用long类型存储反转后的数字来规避int溢出,其实完全可以不用额外的大类型。
  2. 效率浪费:反转整个数字做了一半无用功——回文数的前半段和后半段反转后对称,只需要反转后半段就能完成判断。

原代码空间复杂度已是O(1),但我们可以在保持O(1)的前提下,进一步优化内存使用(去掉long)并提升运行效率。

空间优化后的代码

bool isPalindrome(int x) {
    // 特殊情况提前过滤:负数、末尾为0且本身非0的数
    if (x < 0 || (x % 10 == 0 && x != 0)) {
        return false;
    }

    int reversed_half = 0;
    while (x > reversed_half) {
        // 只反转数字的后半段
        reversed_half = reversed_half * 10 + x % 10;
        x /= 10;
    }

    // 偶数位直接比较;奇数位需去掉反转半段的中间数字再比较
    return x == reversed_half || x == reversed_half / 10;
}

优化说明

  • 特殊情况快速处理:负数不可能是回文;末尾为0但本身非0的数(如10、100),反转后前导0会被忽略,必然不等于原数,直接返回false。
  • 反转半段逻辑:循环条件x > reversed_half保证只反转到数字中间位置,比如数字12321,循环结束后x=12、reversed_half=123;数字1221结束后x=12、reversed_half=12。
  • 结果判断:偶数位直接比较x和反转半段;奇数位把反转半段除以10(去掉中间的单个数字)再和x比较,即可得出结论。
  • 空间与溢出优化:全程仅用int类型变量,无额外大类型或容器,空间复杂度严格保持O(1),同时避免了反转整个数字可能带来的溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:03:20