LeetCode Palindrome Number
发布日期:2025-04-05 01:27:49 浏览次数:12 分类:精选文章

本文共 1441 字,大约阅读时间需要 4 分钟。

判断一个整数是否为回文数是一个经典的问题。回文数是指一个数从左到右读和从右到左读都是一样的。例如,121和12321都是回文数。但负数肯定不可能成为回文数,因为它们会有不同的符号。因此,我们首先排除了负数的情况。

处理步骤:

  • 检查是否为负数:如果x是负数,直接返回false。
  • 单独的0是回文数:如果x等于0,直接返回true。
  • 确定数位数:计算x的数位数量,这可以通过将x不断除以10来完成。
  • 分割高位和低位:逐步分割高位和低位,比较它们是否相等。一旦发现高位和低位不相等,就返回false。
  • 继续分割内部数:如果高位和低位相等,继续分割内部的数,直到处理完所有位或中间交替缩小范围。
  • 通过这种方法,我们可以高效且在O(log n)的时间复杂度内解决问题,同时不在额外的空间中使用数据结构。

    代码实现:

    public class Solution {    public boolean isPalindrome(int x) {        // 负数不可能是回文数        if (x < 0) {            return false;        }        // 0本身是回文        if (x == 0) {            return true;        }        // 允许x为0吗?在这种情况下,0已经处理        int c = 0;        int original = x;        // 计算数字位数        while (original != 0) {            original /= 10;            c++;        }        // 如果x是0或者1位数,直接返回true        if (c < 2) {            return true;        }        int num = x;        // 从两边向中间缩小范围        while (c > 1) {            // 取出最低位            int l = num % 10;            // 取出最高位            int h = num / (int) Math.pow(10, c - 1);            // 比较高位和低位            if (h != l) {                return false;            }            // 减少一位            c--;            // 去掉已经处理的最高位和最低位            num /= 10;            num /= 10;        }        // 没有遍历完或者剩下的是单数位数        return true;    }}

    解释:

  • 负数检查:立即返回false。
  • 单独0检查:直接返回true。
  • 计算数位数量:通过除以10来计算数字的位数c。
  • 分割高位和低位:通过计算最高位(h)和最低位(l),比较它们是否相同。
  • 缩小范围:不断缩小数的范围,直到中间的位数为止,确保每一步都正确。
  • 这种方法逐层分割数字,确保了在O(log n)的时间复杂度内完成任务,同时不在内存中使用额外的空间。

    上一篇:leetcode Plus One
    下一篇:LeetCode OJ:Merge k Sorted Lists(归并k个链表)

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年04月23日 14时28分51秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新一文彻底搞懂大模型 - Agent(非常详细)零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新大模型学习路线,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了 2023-01-25
    2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新大语言模型的指令微调,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了 2023-01-25
    2025版最新网络安全等级保护测评指南,零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新运维怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2023-01-25
    2025版最新黑客学习网站(非常详细),零基础入门到精通,看这一篇就够了 2023-01-25
    2025版网络工程11个高含金量证书(非常详细)零基础入门到精通,收藏这篇就够了 2023-01-25
    2025自学成为黑客必读的5本书籍,带你从小白进阶成大佬 2023-01-25
    23张图告诉你组建一个网络需要用到哪些硬件设备?路由器、交换机、防火墙是不是就够了? 2023-01-25
    #12 btrfs文件系统 2023-01-25
    #3194. 去月球 2023-01-25
    $scope angular在controller之外调用 2023-01-25