题目:
Determine whether an integer is a palindrome. Do this without extra space.
Some hints:
Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?
There is a more generic way of solving this problem.
分析:
该题目是判断一个整型数据是否为回文数,我们见过对字符串判断是否为回文串,条件反射即是利用相同的思想,将整型数据转换为字符串。但是再看题目要求是不允许占用额外的空间,也就是说我们不能分配字符串来存储这个数。
换个思路,回文数也就是类似于1、121、1221这样的数据,负数显然不是回文的。
也就是说,我们可以从两个方向最高位 、最低位 依次判断是否相同。
AC代码:
class Solution { public: bool isPalindrome(int x) { if(x < 0) return false; int size = 0 , tmp = x; while(tmp != 0 ) { tmp /= 10; size++; }//while int p = x , q = x , i , j; for(i=1 ,j=size ; i<j ; i++ , j--) { int a = pow(10 , j-1); if(p/a != q%10) { return false; }else{ p %= a; q /= 10; }//else }//for return true; } };
时间: 2024-10-22 23:29:19