这道题是LeetCode里的第9道题。

题目说的:

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

这道题虽然简单,但是对于简单题,我们要做到用比较骚的方法去解题,就像这道题一样,大部分人想到的是转字符串,然后双指针 blablabla......,不错,我也是这样想的。然而进阶的要求是不使用字符串,我首先想到的是求位数,其实就是变相的使用与字符串类似的方法,具体我就不介绍了,大家懂的都懂,这里我想要说的是用一种更巧妙的方法来解这道题。

我所做的:

class Solution {
public:
bool isPalindrome(int x) {
if(x<0||x>2147447412)return false;
int numSrc=x;
int numDst=0;
while(numSrc){
numDst=numDst*10+numSrc%10;
numSrc/=10;
}
return numDst==x;
}
};

我得到的:

太慢了,上几行代码加个速:

static int x = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();

我收获的:

我这道题之前的 if 条件是不包括 x>2147447412 的,后面官方加了个 2147483647 的实例,导致 int numDst 数据直接溢出,而且官方偷懒,可能只加了这一个实例,我加了这个条件后就通过了。我这个条件其实加了和没加一样,当 x=2147447399 时照样溢出,最好的解决办法是将 numDst 扩充为 long 型就一劳永逸了!

再上一个最快的解法:

static int x = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int reverseNumber = 0;
while (x > reverseNumber) {
reverseNumber = reverseNumber * 10 + x % 10;
x /= 10;
}
return x == reverseNumber || x == reverseNumber / 10;
}
};

这个方法是在我之上折半,最少缩短了一半的时间,而且还不用考虑数据溢出,节约内存,厉害!

static int x = []() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();
class Solution {
public:
bool isPalindrome(int x) {
string s;
ostringstream convert;
convert << x;
s = convert.str();
return equal(s.begin(), s.begin() + s.size() / 2, s.rbegin());
}
};

最新文章

  1. python 解压 压缩包
  2. Myeclipse无法开启Servers视图解决办法
  3. word嵌入图片部分被段落遮挡
  4. [JavaCore]JAVA中的泛型
  5. 02 Linux 下安装JDK并测试开发“Hello World!”
  6. java lambda小纪
  7. 团队作业week3 团队成员规划
  8. C# Best Practices - Creating Good Methods
  9. 详细说明XML分解(两)—DOM4J
  10. 要想提高PHP的编程效率,你必须遵守的原则
  11. netty最快?
  12. xdebug.var_display_max_data
  13. Sql server DATEADD日期函数的使用
  14. 【javascript】回调函数
  15. 配置Asp.Net Web项目NLog配置文件的位置
  16. Network Monitoring in Software-Defined Networking :A Review(综述)
  17. C# 调用Tesseract实现OCR
  18. SQL调优日记--并行等待的原理和问题排查
  19. 【python基础】利用pandas处理Excel数据
  20. BBS--后台管理页面,编辑文章,xss攻击

热门文章

  1. pm2日志切割
  2. 学习php中的mysql()函数
  3. org.apache.axis2.AxisFault: Service class XXXXX must have public as access Modifier解决方案
  4. webpack前端构建工具学习总结(四)之自动化生成项目中的html页面
  5. Grid Infrastructure 启动的五大问题 (文档 ID 1526147.1)
  6. Scalatra
  7. [洛谷P4556][BZOJ3307]雨天的尾巴-T3订正
  8. 1991: C语言实验——大小写转换
  9. Encryption-基础:base64加解密
  10. Bootstrap历练实例:表单控件状态(禁用)