当前位置: 首页 > 后端技术 > Java

【Java面试手册-算法】给定一个数,请判断它是否为回文数?

时间:2023-04-01 22:38:44 Java

在回答这个问题之前,我们首先要明白什么是回文数,回文数有什么特点。回文数:假设n是任意自然数,如果将n的数字逆序排列得到的自然数n1等于n,则称n为回文数。通俗地说,回文数类似于我们在数学中学习的轴对称数字。比如111和12321是回文数,但是1234不是回文数,小数没有回文数。了解了回文数的定义后,对于特殊情况下的数字可以直接得出结论,比如:负数不是回文数,因为负数前有一个减号-;小数没有回文数;0的个数不是回文数;0-9都是回文数;如何通过代码实现呢?常见的思路有两种:将数取反,比较取反后的数是否等于原数(需要注意取反后数域溢出);将数字转成字符串,通过比较字符判断是否为回文数;示例1——数字反转:privatestaticbooleanisPalindrome(intnumber){if(number<0){returnfalse;}inttmpNumber=数字;长反转数=0;while(tmpNumber!=0){reversedNumber=reversedNumber*10+(tmpNumber%10);tmpNumber=tmpNumber/10;}returnreversedNumber==number;}反转数reversedNumber采用long类型,避免反转数后范围溢出。比如int的最大值是2147483647,这是正常的,反之就是7463847412,但是超出了int的范围。示例2—数字到字符串:privatestaticbooleanisPalindrome(intnumber){StringnumStr=String.valueOf(number);int低=0;inthigh=numStr.length()-1;while(low