LeetCode: 9. Palindrome Number
2016-02-24 15:04
344 查看
求一个整数是否是回文数。
形如121, 73637等等之类的数都是回文数。要求空间复杂度为O(1),这就让很多想转换为字符串再去判断的同学止步了;有的同学可能想把该整数倒转之后再去和原数比较是否相等,但是倒转后的数可能超过有符号整数范围,比如2147483647,倒转之后是7463847412,显然不合法。
我的思路是这样的:逐个去掉该整数的最后一位,将去掉的一位作为新整数的最高位;一边“砍掉”指定整数的最低位,一边构造新的整数,判断他们是否相等,如果相等或除最后一位不等外其他位相等(分别对应偶回文和奇回文),则是回文数,如果不是,继续循环。
下面来看代码:
若整数x的位数为n,则平均比较次数是n/2,也没有新开数组,效率是很高的。
形如121, 73637等等之类的数都是回文数。要求空间复杂度为O(1),这就让很多想转换为字符串再去判断的同学止步了;有的同学可能想把该整数倒转之后再去和原数比较是否相等,但是倒转后的数可能超过有符号整数范围,比如2147483647,倒转之后是7463847412,显然不合法。
我的思路是这样的:逐个去掉该整数的最后一位,将去掉的一位作为新整数的最高位;一边“砍掉”指定整数的最低位,一边构造新的整数,判断他们是否相等,如果相等或除最后一位不等外其他位相等(分别对应偶回文和奇回文),则是回文数,如果不是,继续循环。
下面来看代码:
bool isPalindrome(int x) { if(x < 0 || (x != 0 && x % 10 == 0)) return false; int another = 0; while(x >= another) { if(x == another || x == (another * 10 + x % 10)) return true; else { another *= 10; another += (x % 10); x /= 10; } } return false; }
若整数x的位数为n,则平均比较次数是n/2,也没有新开数组,效率是很高的。
相关文章推荐
- HighCharts入门
- CSS3 transform3D变形
- win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
- 转载:Linux下简单makefile编写示例
- chmod 递归修改权限
- MYSQL5.5源码安装 linux下
- PhpExcel中文帮助手册|PhpExcel使用方法
- 求字符串中的最小的子字符串长度
- 【算法】如何反转一个单链表?如何两两反转?
- iOS开发 自带二维码扫描(仅支持iOS7及以上系统)
- linux练习题01
- windows server 2008 管理员密码忘记的怎么重新设置
- android电池系统
- django项目部署到SAE上的个人博客
- BCDBOOT命令参数介绍
- 给 Android 开发者的 RxJava 详解
- CocoaPods安装与使用(附如何在x-code中显示免去一直去terminal修改的繁琐)
- 修改eclipse中tomcat启动默认超时时间
- 二维图形的矩阵变换(一)——基本概念
- 百度地图学习笔记一 开始