LeetCode || Palindrome Number
2016-04-08 10:18
148 查看
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)推断回文过程中能够取出收尾的数字,再比較,也能够直接比較,我用的直接比較;
代码例如以下:
注意假设 x = 100001。那么经过一轮循环,x就变为1了。小于div 了。由于中间的0被取模消去了,此时也不影响推断过程,由于 x /div 依旧等于0.
參考链接:http://leetcode.com/2012/01/palindrome-number.html
推断一个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; } };
注意假设 x = 100001。那么经过一轮循环,x就变为1了。小于div 了。由于中间的0被取模消去了,此时也不影响推断过程,由于 x /div 依旧等于0.
參考链接:http://leetcode.com/2012/01/palindrome-number.html
相关文章推荐
- [cocos2dx笔记016]cocos2dx 3.2 的UserDefault
- php将字符首字母大小写转换
- Jsoup +JavaScript 扒取网站模板 bootstarp
- Android Studio 使用技巧
- Linux iconv --字符编码转换工具
- Spring 后台向前端传送json数据中文乱码
- JS中函数参数的传递
- XTU1238:Segment Tree(线段树区间更新)
- 蓝牙时钟
- 曾经经历的面试题汇总(2)
- json
- [BIM]STEP标准和EXPRESS语言
- apache thrift 和 apache jersey 记录
- 吃土豆
- 注解spring 自带简单汇
- 高速公路沥青路面病害分析及养护
- comparable和comparator的用法与区别
- HTTP响应头和请求头信息对照表
- Java定时调度
- 后缀数组(一)