Leetcode JAVA刷刷站(9)回文数

发布于:2024-08-14 ⋅ 阅读:(131) ⋅ 点赞:(0)

一、题目概述

二、思路方向 

       在Java中,判断一个整数是否为回文数,可以通过将该整数转换为字符串,然后比较字符串与其反转后的字符串是否相同来实现。但这种方法在整数非常大时可能不太高效,因为它依赖于字符串操作。一个更高效的方法是直接在整数上进行操作,避免使用字符串,这样可以在不使用额外空间的情况下完成判断。

三、代码实现  

public class Solution {  
    public boolean isPalindrome(int x) {  
        // 负数和个位是0但不是0的整数一定不是回文数  
        if (x < 0 || (x % 10 == 0 && x != 0)) {  
            return false;  
        }  
  
        int reversed = 0;  
        while (x > reversed) {  
            reversed = reversed * 10 + x % 10;  
            x /= 10;  
        }  
  
        // 当数字长度为奇数时,我们可以通过 reversed//10 去除处于中位的数字。  
        // 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,reversed = 123,  
        // 由于中间的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。  
        return x == reversed || x == reversed / 10;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        System.out.println(solution.isPalindrome(121)); // 输出 true  
        System.out.println(solution.isPalindrome(-121)); // 输出 false  
        System.out.println(solution.isPalindrome(10)); // 输出 false  
    }  
}

执行结果:

四、小结 

       这段代码首先处理了一些特殊情况:负数以及个位是0但不是0本身的整数(比如10),这些情况下的整数一定不是回文数。

       然后,使用一个while循环来反转整数的一半。通过不断地取余和整除操作,我们逐步构建出原始整数的倒序数,并将其存储在reversed变量中。当原始整数小于或等于其反转后的整数时,循环结束。

       最后,判断原始整数和反转后的整数是否相等(或原始整数是反转整数除以10的结果,这适用于原始整数长度为奇数的情况)。如果相等,则返回true,否则返回false

       这种方法避免了使用额外的存储空间(除了几个整型变量),并且在整数很大时也能有效工作。 

 结语 

被一个人深深地爱著将给你力量

深深地爱著一个人将给你勇气

!!!