资讯专栏INFORMATION COLUMN

[Leetcode] Palindrome Number 回文数

_Suqin / 801人阅读

摘要:反转比较法复杂度时间空间思路回文数有一个特性,就是它反转后值是一样的。代码逐位比较法复杂度时间空间思路反转比较有可能会溢出,但我们遍历每一位的时候其实并不用保存上一位的信息,只要和当前对应位相等就行了。首先,负数是否算回文。

Palindrome Number
  

Determine whether an integer is a palindrome. Do this without extra space.

反转比较法 Reverse and Compare 复杂度

时间 O(n) 空间 O(1)

思路

回文数有一个特性,就是它反转后值是一样的。所以我们可以先将其反转,然后比较反转数和原数是否相等。该方法的问题在于溢出的判断和处理,我们可以参考反转整数中的几种处理方法。

代码
javapublic class Solution {
    public boolean isPalindrome(int x) {
        long reverse = 0, original = x;
        if(x<0){
            return false;
        }
        while(x>0){
            reverse *= 10;
            reverse += x % 10;
            x /= 10;
        }
        return original == reverse;
    }
}
逐位比较法 One By One 复杂度

时间 O(n) 空间 O(1)

思路

反转比较有可能会溢出,但我们遍历每一位的时候其实并不用保存上一位的信息,只要和当前对应位相等就行了。所以我们可以遍历一遍先算出数的长度,再遍历一遍同时对比前后的对应位。

代码
javapublic class Solution {
    public boolean isPalindrome(int x) {
        if(x < 0){
            return false;
        }
        int digits = 1;
        int original = x;
        // 计算当前数的位数,个位数不用计算,已经默认为1
        while(x > 9){
            digits *= 10;
            x /= 10;
        }
        // 逐位比较
        x = original;
        while(x > 0){
            int msd = x / digits;
            int lsd = x % 10;
            if(msd != lsd){
                return false;
            }
            // 去除最高位和最低位
            x -= msd * digits;
            x /= 10;
            digits /= 100;
        }
        return true;
    }
}
后续 Follow Up

Q:在答题之前我需要知道些什么?
A:因为回文的定义原本只适用于字符串,所以我们要先问清楚数字回文是如何定义的。首先,负数是否算回文。其次,在计算回文时,我们应该按十进制算还是其他进制,如二进制。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64384.html

相关文章

  • LeetCode - 009 - 回文palindrome-number

    摘要:最后,我们判断一开始的两种情况,并返回或者即可。本许可协议授权之外的使用权限可以从处获得。 Create by jsliang on 2019-05-22 19:30:42 Recently revised in 2019-05-23 11:42:52 一 目录 不折腾的前端,和咸鱼有什么区别 目录 一 目录 二 前言 三 解题  3.1 解题 - 数组操作 ...

    hikui 评论0 收藏0
  • [Leetcode] Palindrome Number 回文

    摘要:首尾比较法复杂度时间空间,为所求的长度思路先求记为的长度根据长度制造掩码循环当当最高位等于最低位还有数字等待判断最高位通过掩码和整除取得,最低位通过取余取得判断过后更新掩码,删掉最高位,删掉最低位注意求长度的如何取得一个的最高位假设答设置一 Palindrome Number Determine whether an integer is a palindrome. Do this w...

    lixiang 评论0 收藏0
  • leetcode 9 Palindrome Number

    摘要:有一点需要注意的是,负数不算作回文数。而第题当时的方法是,对整数取除的余数,即是当前整数的最后一位。那么它翻转后一半的数字之后,应该和前半段的数字相等,我们将采用这种思路进行解题。 题目详情 Determine whether an integer is a palindrome. Do this without extra space.题目要求我们在不占用额外空间的前提下,判断一个整...

    darkbug 评论0 收藏0
  • [Leetcode] Palindrome Permutation 回文变换

    摘要:最笨的方法就是用的解法,找出所有的,然后再用中判断回文的方法来判断结果中是否有回文。而中心对称点如果是字符,该字符会是奇数次,如果在两个字符之间,则所有字符都是出现偶数次。 Palindrome Permutation Given a string, determine if a permutation of the string could form a palindrome. F...

    svtter 评论0 收藏0
  • Leetcode 9 Palindrome Number 回文字判定

    摘要:难度本题要求判定一个整数是否为回文数字比如都是回文数字但是不是回文数字所有负数都不是回文数字本题还有一个关键要求不能使用额外空间我理解这里的额外空间是指堆空间在程序中不能去额外的什么变量更不用说提升空间复杂度直接上的解法解法 Determine whether an integer is a palindrome. Do this without extra space. Some ...

    ningwang 评论0 收藏0

发表评论

0条评论

_Suqin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<