【LeetCode #9 题解】 回文数
发布日期:2021-06-29 14:52:37
浏览次数:3
分类:技术文章
本文共 1180 字,大约阅读时间需要 3 分钟。
一、题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121输出: true
示例 2:
输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
二、题解
题目要求不能转为字串来解决,这样也比较简单,即将整数的回文整数求解出来。
如果是负数 或 回文整数超出整数int范围,肯定不是回文数。代码如下:
#define INT_MAX 2147483647 bool isPalindrome(int x){ int result=0, x_t = x; while(x_t){ // 如果转换后,数据溢出,肯定不是回文数 if( x_t < 0 || result > INT_MAX/10 || (result == INT_MAX/10 && x_t%10 >= 7)) return false; result = result * 10 + x_t%10; x_t = x_t/10; } return result == x ? true: false;}
三、更优解
从leetcode 网友的题解上,学习到一种方法,类似双指针,但又不是转为字串来实现。
我们来学习下吧:// 计算10 的阶乘int get_10_n(int x){ return x > 0 ? 10 * get_10_n(x-1): 1;}bool isPalindrome(int x){ int x_t = x, len=0, start=0; if(x < 0) return false; // 统计整数的长度 while(x_t){ x_t /= 10; len++; } // 此时以start 为低位起点,len 为高位末尾,类似双指针 while( len >= start){ if( (x/(get_10_n(len-1)))%10 != (x/(get_10_n(start)))%10 ) return false; len--; start++; } return true;}
从结果得知,该方法,相较于前面的,更加高级,在时间空间上也更高效。
转载地址:https://ciellee.blog.csdn.net/article/details/107410775 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月25日 12时39分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
zbar优化
2019-04-29
微信扫码登录验证PHP代码(不用开放平台)
2019-04-29
CH554E USB单片机 10引脚小封装低成本USB方案
2019-04-29
windows MQTT客户端
2019-04-29
LINUX下挂载(mount)查看树莓派镜像文件
2019-04-29
基于CH568芯片加密SD卡方案
2019-04-29
1元钱的超低成本单芯片USB单片机方案
2019-04-29
单片机/树莓派扩展双串口(TTL和RS485)
2019-04-29
JAVA(android)提取WIFI客流探针MAC地址源码
2019-04-29
基于CH568芯片的SATA电子盘方案
2019-04-29
linux下C语言判断网络是否连接
2019-04-29
STM32Cube_FW_F4_V1.17 F4固件包百度网盘下载
2019-04-29
猿来绘Java-35-线程的同步(生产者和消费者问题)
2019-04-29
猿来绘Java-36-解决线程安全问题
2019-04-29
猿来绘Java-37-ReentrantLock解决线程安全问题
2019-04-29
猿来绘Java-38-生产者消费者模型
2019-04-29
猿来绘Java-39-JDK8的新日期时间类
2019-04-29
猿来绘Java-40-比较器(Comparable 接口与 CompareTo方法)
2019-04-29
猿来绘Java-41-源码分析String对象的数组的排序(JDK1.8)
2019-04-29