一看到这个题的难度是:Easy,我在想这次我终于可以不用参考相关的代码了吧,事实证明这个题是我自己想出来的哈哈哈哈哈哈~刚开始下手的时候首先想到的是将数字转换成字符串然后通过栈的方式解决,后来就得它麻烦,想起来之前做过一个类似的题,就是反转数字,如果一个数是回文数,那么数字本身和反转的数字应该是一样的,我的思路就是基于这个。当然,后来我才知道为什么没人用将数字转换成字符串,因为题目要求不使用额外空间,一般来说不使用额外空间的意思是不使用复杂度为O(n)的额外空间,新建一些字符串、整型值之类的还是可以的。需要注意的是,如果输入的是负数,直接返回false。下面就是我的代码啦!
class Solution {
public:
bool isPalindrome(int x) {
long long y = 0;
int origin = x; //这句话特别的重要,因为最后要比较的是原始数据,而while循环中已经将x的值改变了
if(x<0)
return false;
while(x){
int n = x % 10;
y = y*10 + n;
x = x / 10;
}
if(y > INT_MAX || y < INT_MIN){
return false;
}
if(y == origin)
return true;
else
return false;
}
};
后来在网上发现一种更加巧妙的方法,巧用“/”和“%”符号,厉害!
class Solution{
public:
bool isPalindrome(int x){
if(x < 0)
return false;
int div = 1;
while(x / div >= 10){
div *= 10;
}
while(x != 0){
int l = x/div;
int r = x%10;
if(l != r)
return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
};
这个方法我不得不服啊!!学习了!!
忽然觉得完成一件事情,最难的部分也许不是这件事情本身的难度,而是开头难,事情本身的难度决定了完成之后本人的成就感的大小,所以俗话说“万事开头难”嘛。就像我想要改变我自己一样,有时候逼一下自己还是必要的。开始了也就不怕困难了!!
Fighting!!