題目
Determine whether an integer is a palindrome. Do this without extra space.
分析
這是leetcode上的第9題,難度為easy,判斷整型數字是否為回文串,需要注意兩點:
- 1、負數都不是回文
- 2、小于10的非負整數都是回文
這一題與第7題類似,也可以有兩種思路:數組法和模十法。由于題目對空間復雜度有要求,所以使用模十法
js實現
模十法:
把給定的x使用模十法逆序一下,與原x的值比較
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x<0) return false;
if(x<10) return true;
var temp = 0;
var org = x;//記錄x的初始值
while(x>9){
temp = x%10+temp*10
x = parseInt(x/10)
}
temp = temp*10 + x
return temp == org
};
模十改進版:
上面方法將給的x完全逆序后比較,其實還可以簡化一下。比如整數12321
,當上面方法中的while循環進行到當temp=123
,x=12
時,這時就可以判斷為回文了,此時x==parseInt(temp/10)
。再比如12344321
,當進行到temp=1234
,x=1234
時也可以判斷回文了,此時temp==x
。所以代碼可以如下改進:
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
//能被10整除的非0整數和負數,返回false
if(x<0||(x%10==0&&x!=0)) return false;
if(x<10) return true;
var temp = 0;
while(x>temp){
temp = x%10+temp*10
x = parseInt(x/10)
}
return (temp == x)||(parseInt(temp/10)==x)
};