数学LeeCode9.回文数

Posted chenry777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学LeeCode9.回文数相关的知识,希望对你有一定的参考价值。

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

在这里插入图片描述

题解一、将整数转为字符串来处理

把 int 转成字符串,然后判断是否是回文串做就可以了,缺点是需要额外的空间存储字符串。

class Solution {
    // 题解一:将整数转为字符串来处理
    public boolean isPalindrome(int x) {
        StringBuilder temp1 = new StringBuilder(3).append(x);
        String temp2 = temp1.toString();
        String rev = temp1.reverse().toString();
        return temp2.equals(rev);
    }
}

调用了StringBuilder的reverse()方法,时间复杂度为O(log(n)),空间复杂度为O(n)

题解二、调用整数翻转函数来实现

在第 7 道题我们写了倒置 int 的算法,这里当然可以用到了,只需要判断倒置前后相不相等就可以了。
显然可证回文数不可能造成int类型值溢出,故无需判断值溢出

class Solution {
    // 题解二:调用整数翻转函数来实现
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        return x == reverse(x);
    }

    public int reverse(int x) {
        long rev = 0;
        while(x != 0) {
            int y = x % 10;
            x /= 10;
            rev = rev * 10 + y;
        }       
    }
}

时间复杂度为O(log(n)),空间复杂度为O(1)

题解三、将右半部分倒置然后和左半部比较就可以了

其实,我们只需要将右半部分倒置然后和左半部比较就可以了。比如 1221 ,把 21 转置和 12 比较就行了。

比较的原理见下图:
在这里插入图片描述

class Solution {
    // 题解三:将右半部分倒置然后和左半部比较就可以了
    public boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        // 总位数
        int digit = (int) (Math.log(x) / Math.log(10) + 1);
        int rev = 0;
        int y = 0;

        //倒置右半部分 
        for (int i = 0; i < digit / 2; i++) { 
            y = x % 10;
            x /= 10;
            rev = rev * 10 + y;
        }

        // 偶数情况:x直接与rev比较
        if (digit % 2 == 0 && x == rev) {
            return true;
        }
        // 奇数情况:x除以10去除1位后再与rev比较
        if (digit % 2 != 0 && x / 10 == rev) { 
            return true;
        }
        return false;
    }
}

时间复杂度为O(log(n)),但是法2,空间复杂度为O(1)

以上是关于数学LeeCode9.回文数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode_09 回文数数学

数据结构与算法数学——回文数

JS leetcode 回文数 题解分析,数学不好是硬伤

Leetcode练习(Python):数学类:第9题:回文数:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

回文数字

LeetCode9. 回文数