标签:leetcode
Determine whether an integer is a palindrome. Do this without extra space.
判断一个int值是否为回文数。本题有几点需要注意:
(1)不能用额外存储空间,也就是说只能用常数空间解决;诸如将int转换为string再去比较字符是不可行的;
(2)判断回文数的方法有两个:从中间开始向两头判断、从两头向中间判断;后者更简单一些,每次取出低位和高位数字进行比较,取低位直接模10就行,那如何取高位呢?取高位也用模的方法,只不过我们要首先知道X有多少位,如1001有四位,那么我们取高位的1时就模1000,我们设这个高位模为div,首先得计算出div才能开始判断回文,计算div的方法就是用x去除以10、100、1000.。。。直到得0,即:
div =10;
while(x / div != 0) div *= 10;
然后最后div /= 10;就行了。
我一开始就是这么做的,但是不知道大家有没有发现,如果x是几十亿的数,while循环结束时得到的会是大一个数量级的上百亿的数(所以最后还要除以10),这样div就溢出了,所以这么求div是不对的;应该这么求:
div =1;
while( x / div >10) div *= 10;
这样就不会溢出了,除非 x 溢出(这是不可能的);
(3)判断回文过程中可以取出收尾的数字,再比较,也可以直接比较,我用的直接比较;
代码如下:
class Solution { public: bool isPalindrome(int x) { if(x<0) return false; int div=1; while(x/div >= 10) div*=10; while(x>0 && (x%10 == x/div)){ x %= div; div /= 100; x /= 10; } if(x > 0) return false; return true; } };
参考链接:http://leetcode.com/2012/01/palindrome-number.html
标签:leetcode
原文地址:http://blog.csdn.net/jiadebin890724/article/details/37961917