由于题目要求空间复杂度味O(1),所以不能考虑将数字变成字符串,并且之前reverse中会有溢出的问题,所以,可以使用之前在网络上看到的reverse的简单解法,即通过整除取余比较最高位数与最低位数。
错误代码如下:
var isPalindrome = function(x) {
if(x<0) return false;
else if(x<10) return true;
var num=0; //表示x的位数
temp=x;
while(temp>0){
num++;
temp=temp/10;
}
//alert(x);
while(x>0){
if((x%10)==(x/10^num)){
num--;
x=x-x%10-10^num; //这里相当于默认为每一个数的最高位都是1,错误!!!
}
else return false;
}
return true;
};
首先这样在leetcode上运行时,time limited,而且是错误的。应该是最高为数字*10^num。。。
本题中,需要仔细 ---- 比较x的最高位和最低位数字之后,x的位数减少了2位!!!
需要注意的是:在javascript语言中,101/10=10.1!!!!如果取整需要使用Math.floor()或者Math.ceil()函数!!!! 并且,在js中,10^10不是取幂,需要使用Math.pow()函数!!!!