题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:输入:x = -101
输出:false来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number
思路:
本题要判断是否是回文数,我们的思路是取出最前一位的数和最后一位的数进行比较(当然也可以转成字符串判断)
我们取出第一位的方法就是让它/10的本位次方,取最后一位是用对10取余。
每次比较完第一位和最后一位,我们要去除首位,即对“10的最高位次方”取余来去除最高位,再对10取余去掉最低位。
当有一次首尾不同时,就返回false,当x只剩各位时,就返回true。
当我们解决了大多数情况后,考虑一下特殊的负数、个位数、0。
我们发现后两者都可以解决,而负数一定是false,我们直接返回false就行。
注意:
1.对于求n次方的Math.pow()方法的返回值和参数都是double类型,用int接收要有强制类型转换。
2.当要去除首尾时,要先去首,再去尾,因为去除尾之后,最高位的位数就有变化了。
代码:
package LeetCode;
public class HuiWen {
public static void main(String[] args) {
Solution3 solution3=new Solution3();
System.out.println(solution3.isPalindrome(210012));
}
}
class Solution3 {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}
int front=(int)Math.pow(10,(""+x).length()-1);
while(front>1){
if(x/front!=x%10){
return false;
}else{
x=x%front/10;
front=front/100;
}
}
return true;
}
}