9.回文数

简介: 9.回文数

判断一个整数是否回文。

 

1.用字符串反转

 public boolean isPalindrome(int x) {
        
        if (x<0)
            return false;
        StringBuilder sb = new StringBuilder(String.valueOf(x)).reverse();
        if (sb.toString().equals(String.valueOf(x)))
            return true;
 
        return false;
    }

2. 不用字符串

整数反转,参加7.整数反转https://pigeon.blog.csdn.net/article/details/115454272。

 public boolean isPalindrome(int x) {
        if (x<0)
            return false;
 
        int rev = 0;
        int xx = x;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE%10)) return false;
 
            rev = rev * 10 + pop;
        }
        if (rev == xx)
            return true;
        else
            return false;
    }

3.对2优化,不必将整个数反转,只需反转一半。既减少一半的运算,又避免越界的可能。

问题是:何时到达一半?


由于整个过程我们不断将原始数字除以 10,然后给反转后的数字乘上 10,所以,当原始数字小于或等于反转后的数字时,就意味着我们已经处理了一半位数的数字了。

需要考虑边界情况x<0 和 x的最后一位是0。//这两种情况会影响上述对“一半”的判断,

 public boolean isPalindrome(int x) {
        if (x<0 || (x%10 == 0   &&   x != 0)) {
            return false;
        }
        int reverted = 0;
        while (x>reverted) {
            reverted = reverted*10 + x%10;
            x/=10;
        }
        return  (reverted == x) || (reverted/10 == x); //偶 || 奇
    }
相关文章
|
C语言
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
220 0
|
4月前
|
Java
回文数
本题要求判断一个整数是否为回文数,即正序和倒序读都相同。示例包括:121 (true), -121 (false), 10 (false)。进阶挑战是在不将整数转换为字符串的情况下解决问题。给出的 Java 代码通过将整数转换成字符串并反转比较实现功能。
43 0
|
6月前
将一个正整数分解质因数
将一个正整数分解质因数。
100 8
|
7月前
|
算法
LeetCode第9题回文数
该文章介绍了 LeetCode 第 9 题回文数的解法,通过分析回文数的特征,只需反转一半数字进行比较即可,时间复杂度可降至 O(n/2),并总结了该题与整数反转有关,需根据回文数特征来解决。
LeetCode第9题回文数
|
10月前
leetcode-9:回文数
leetcode-9:回文数
45 0
leetcode:9.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
52 1
|
存储 算法
算法练习:回文数
算法练习:回文数
137 0