判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
我最开始的解法,把数字转换成字符串,然后比较头尾,时间空间复杂度还过得去。当然反转方法也可以用gBuilder的reverse()方法来进行。
class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}else{
char[] charStr = Integer.valueOf(x).toString().toCharArray();
for(int i=0; i<charStr.length/2; i++){
if(charStr[i] != charStr[charStr.length-1-i]){
return false;
}
}
}
return true;
}
}
进阶要求是不把数字转换为字符串,这个可以通过数值反转来实现,但是会有一个问题,就是反转后的数值可能会超出int的范围,讨论区有人提出一个思路就是将数字都变成long类型,这样就不会超出了。
class Solution {
public boolean isPalindrome(int x) {
long revx = 0;
long orx = x;
if(x<0){
return false;
}
while(orx > 0){
revx = revx * 10 + orx%10;
orx = orx/10;
}
if(revx != x){
return false;
}
return true;
}
}
写完之后在想,如果数字本身是long那怎么办,由此忽然想到,虽然这个情况是存在的,但是如果是回文数的话那么反转后肯定不会超出int,如果不是回文数,超出后会被截取,也肯定不等于原数,所以这个问题可以忽略,代码如下。
class Solution {
public boolean isPalindrome(int x) {
int revx = 0;
int orx = x;
if(x<0){
return false;
}
while(orx > 0){
revx = revx * 10 + orx%10;
orx = orx/10;
}
if(revx != x){
return false;
}
return true;
}
}