资讯专栏INFORMATION COLUMN

[Leetcode] Palindrome Number 回文数

lixiang / 3025人阅读

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

Palindrome Number

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

首尾比较法 复杂度

O(Length) 时间 O(1) 空间, Length为所求Integer的长度

思路

先求Integer (记为x) 的长度len

根据长度制造掩码 (mask)

循环当:当最高位等于最低位 && x还有数字等待判断(x != 0)

最高位通过掩码和整除取得(646/100=6),最低位通过取余取得(646%10=6)

判断过后更新掩码(mask/=100),删掉最高位(x%=mask),删掉最低位(x/=10)

注意

求Integer长度的utility:

int len = 0;
while (x != 0) {
    len++;
    x /= 10;
}
return len;

如何取得一个Integer的最高位?假设x = 688
答:x / mask. 设置一个和x位数一样的mask,mask = 100,然后用x/mask,表示x里面有几个mask,即是最高位数字. 688里有6个100,即为6.

如何删去一个Integer的最高位?假设x = 688
答:x = x % mask. 还是用这个mask,用 x = x % mask 即可得到688除以100的余数,这个余数其实等于删掉了x的最高位剩下的数.

如何取得一个Integer的最低位?假设x = 688
答:x % 10.

如何删去一个Integer的最低位?假设x = 688
答:x = x / 10.

代码
public class Solution {
    public boolean isPalindrome(int x) {
        if (x < 0)
            return false;
        int len = getIntegerLength(x);
        int mask = (int)Math.pow(10, len - 1);
        while (x != 0) {
            if (x % 10 != x / mask)
                return false;
            x %= mask;  //去最高位
            x /= 10;    //去个位
            mask /= 100;    //mask要丢掉两个零,不是一个!
            
        }
        return true;
    }
    public int getIntegerLength(int x) {
        int len = 0;
        while (x != 0) {
            x /= 10;
            len++;
        }
        return len;
    }
}

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

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

相关文章

  • [Leetcode] Palindrome Number 回文

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

    _Suqin 评论0 收藏0
  • 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 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条评论

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