1. Reverse and compare. This solution may lead to overflow.
public class Solution {
public int numberOfBits(int x) {
int num = 1;
while(x/10 > 0) {
num++;
x = x/10;
}
return num;
}
public int reverse(int x, int num) {
if(x==0 || num==1) return x;
int cur = x%10;
return cur*(int)(Math.pow(10, num-1)) + reverse(x/10, num-1);
}
public boolean isPalindrome(int x) {
if(x<0) return false; // here negative numbers are defined as non-palindrome numbers
return x==reverse(x, numberOfBits(x));
}
}
2. Compare the first and last integer one by one.
http://leetcode.com/2012/01/palindrome-number.html
public class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false; // here negative numbers are defined as non-palindrome numbers
if(x/10==0) return true;
int div = 1;
while(x/div >= 10) { // note the terminate condition is >= 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;
}
}
3. reverse an integer
public int reverse(int x) {
int rev = 0;
while(Math.abs(x) > 0) {
int i = x%10;
rev = rev*10 + i;
x /= 10;
}
return rev;
}