回文数(Palindrome Number)-java解法
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
java解法
1.数学解法,每次比较头尾的两个数字
首先找到最大的除数div(如数为3862,则最大除数为1000)。通过(x/div)得到头部数字,通过(x%10)得到尾部数字;两者相比较,如果不同,返回false;如果相同,去掉头尾的数字(去掉头部:x%div,去掉尾部x/10)并将div缩小100倍。
代码:
class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
//小于0的一定不是回文数
}
int div = 1;
while(x / div >=10){
div *= 10;
//找到对应除数
}while(x>0){
int left = x / div;
//找到头部数字
int right = x % 10;
//找到尾部数字
if(left != right){
return false;
}x = (x%div)/10;
//去掉头尾数字
div /= 100;
//确定下一个除数
}return true;
}
}
2.折半反转比较
- 每次进行取余操作 ( %10),取出最低的数字:y = x % 10
- 将最低的数字加到取出数的末尾:reverseNum =reverseNum * 10 + y
- 每取一个最低位数字,x 都要自除以 10 判断 x 是不是小于 reverseNum,当它小于的时候,说明数字已经对半或者过半了
- 最后,判断奇偶数情况:如果是偶数的话,revertNum 和 x相等;如果是奇数的话,最中间的数字就在revertNum 的最低位上,将它除以 10 以后应该和 x 相等。
代码:
class Solution {
public boolean isPalindrome(int x) {
if(x<0 || (x%10 == 0 && x!= 0)){
return false;
}int reverseNum = 0;
while(x >reverseNum ){
reverseNum = reverseNum*10+x%10;
System.out.println(reverseNum);
x/=10;
System.out.println(x);
}return x == reverseNum || x == reverseNum/10;
}
}