// Rewrite in Markdown mode. 16/9/13
Problem Description
- Determine whether an integer is a palindrome. Do this without extra space.
Some Details
- What is the meaning of ‘extra space’?
- Try to use less variables to solve this problem.
Solution
- Compare the digits one by one. The first with the last, the second with the second to last and so on…
- How to get each digit?
- For a number ‘x’, x=x0+x1*10+x2*10^2+…+xn*10^n. (xi means the ith digit in ‘x’)
- So xi=x % [10^(i+1)] / (10^i). With this formula, you could solve this problem.
- However, Suppose i=n, xn=x % [10^(n+1)] / (10^n).
- 10^(n+1)>x. So 10^(n+1) may cause overflow, you need a special sentence for it.
I use 5 variables to solve this problem. And the time complexity is O(N^2)(N is the length of x). I am still trying to solve it better.
// 1 variable and O(N) to solve it. Read “Leetcode #9 Discussion”.
You could find more details in my code.
Code
bool isPalindrome(int x)
{
if(x<0) return false;
int i,j,t,l,a;
i=x; j=0;
while (i) { j++; i/=10;}
for (i=1;i<=j/2;i++)
{
l=1;
for (t=1;t<=i;t++) l*=10;
a=x %l/(l/10);
if (i==1)
{
for (t=i+1;t<=(j-i);t++) l*=10;
if (a!=x/l) return false;
}else
{
for (t=i+1;t<=(j-i+1);t++) l*=10;
if (a!=x %l/(l/10)) return false;
}
}
return true;
}