Leetcode 回文数

下面是解决这个回文数问题的一个Java解法:

代码解释

  1. 特殊情况处理
    • 如果数字是负数,直接返回false,因为负数不可能是回文数。
    • 如果数字以0结尾,但不是0本身,也不可能是回文数(例如10不是回文数)。
  2. 核心逻辑
    • 利用反转数字的一半来判断是否是回文数。
    • 每次取x的最后一位数字,将其添加到反转的数字revertedNumber中。
    • 同时将x缩小为去掉最后一位后的数字。
    • 当原始数字x小于或等于revertedNumber时,说明已经处理了一半或更多。
  3. 回文判断
    • 如果数字的长度是偶数,x应该等于revertedNumber
    • 如果数字的长度是奇数,x应该等于revertedNumber / 10(因为反转数字会多一位)。

示例

  • 输入:x = 121

    输出:true

  • 输入:x = -121

    输出:false

  • 输入:x = 10

    输出:false

这个解法的时间复杂度是O(log10(n)),空间复杂度是O(1)。

java 复制代码
class Solution {
    public boolean isPalindrome(int x) {
        //首先处理特殊情况,负数和以0结尾的非0元素必然不是回文数
        if(x < 0 || (x % 10 == 0 && x != 0)) return false;

        //然后将该数字反转
        int revertedNum = 0;
        while(x > revertedNum) {
            revertedNum = revertedNum * 10 + x % 10;
            x /= 10;
        }
        return (x == revertedNum || x == revertedNum / 10);
    }
}
相关推荐
ZPC821011 小时前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC821011 小时前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
琢磨先生David11 小时前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
颜酱11 小时前
栈的经典应用:从基础到进阶,解决LeetCode高频栈类问题
javascript·后端·算法
多恩Stone11 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
生信大杂烩11 小时前
癌症中的“细胞邻域“:解码肿瘤微环境的空间密码 ——Nature Cancer 综述解读
人工智能·算法
蜡笔小马11 小时前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
m0_5312371712 小时前
C语言-数组练习进阶
c语言·开发语言·算法
超级大福宝12 小时前
N皇后问题:经典回溯算法的一些分析
数据结构·c++·算法·leetcode
qq_4592344212 小时前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评