LeetCode第9题回文数

继续打卡算法题,今天学习的是第LeetCode第9题回文数,这道题目是道简单题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码能力有一些帮助。

分析一波题目

看完题目,我们很容易想到,只要把数字反过来,然后两个相比就可以了,这个时候时间复杂度是O(n),我们再仔细想一下,一个回文数,我们只要将反过来的一半比较就可以知道是不是回文数了,大家想一下是不是这个道理。比如1221, 我们只要把21反转和12比较,这个时候已经知道是不是回文了,也就没必要反转整个数字,因此时间复杂度可以降到O(n/2),因此反转一半就是解决这个题目的诀窍了。

编码解决

java 复制代码
class Solution {
    public boolean isPalindrome(int x) {
        // 特殊情况处理:
        // 如上所述,当 x < 0 时,x 不是回文数。
        // 同样地,如果数字的最后一位是 0,为了使该数字为回文,
        // 则其第一位数字也应该是 0
        // 只有 0 满足这一属性
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int revertedNumber = 0;
        //这里为什么是x > revertedNumber,因为如果是回文的话反转了一半了就不满足这个条件
        //如果是回文,计算到中位数 如果是12321 计算到x=12,如果是1221 计算到12
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }

        // 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
        // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
        // 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
        return x == revertedNumber || x == revertedNumber / 10;

    }
}

总结

这个题目和整数反转有关,如果知道整数反转的思路,我们多分析一下回文的特征,就可以想到解决方案。

记录下回文数的特征:

只要反转右半边的数字,左右两半的数字相同这个原始的数就是回文数。

相关推荐
纪元A梦10 分钟前
贪心算法应用:化工反应器调度问题详解
算法·贪心算法
深圳市快瞳科技有限公司41 分钟前
小场景大市场:猫狗识别算法在宠物智能设备中的应用
算法·计算机视觉·宠物
liulilittle1 小时前
OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
网络·c++·网络协议·tcp/ip·算法·ip·通信
Haven-3 小时前
Java-面试八股文-JVM篇
java·jvm·面试
superlls3 小时前
(算法 哈希表)【LeetCode 349】两个数组的交集 思路笔记自留
java·数据结构·算法
田里的水稻4 小时前
C++_队列编码实例,从末端添加对象,同时把头部的对象剔除掉,中的队列长度为设置长度NUM_OBJ
java·c++·算法
纪元A梦4 小时前
贪心算法应用:保险理赔调度问题详解
算法·贪心算法
大前端helloworld4 小时前
从初中级如何迈入中高级-其实技术只是“入门卷”
前端·面试
Jayden_Ruan5 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法