
题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
编程思路
1. 字符串反转法
(1) 整数转换成字符串,利用split()函数转换成数组
(2) 再利用reverse()函数,将该数组的元素反转
(3) 然后再利用join()方法将反转后的数组转换成字符串,这就形成了与整数相反的字符串了
2. 整数反转法
(1) 首先要判断x是正数还是负数
(2) 如果x是负数则返回false,因为负数的符号就是一个重要因素(后又补充x % 10 == 0 && x != 0 这一条件,因为 x % 10 == 0 && x != 0那必然是这个整数以0结尾,才能被10除净;且这是负数的情况,所以该整数不为0)
(3) 如果该整数是正数的话,则要分两种情况。当0 <= x < 10时,不论怎么反转都是本身,所以返回true。当x>10时,看代码即可明白。
代码实现
//将整数转换成字符串来解决这道算法题
var isPalindrome = function(x) {
let str = x.toString();
let reverseStr = x.toString().split('').reverse().join('');
if(str == reverseStr ){
return true;
}else{
return false;
}
};
进阶
不将整数转为字符串来解决这个问题
var isPalindrome = function(x) {
var rev = 0;
var num = x;
if(x<0 || (x % 10 == 0 && x != 0)){
return false;
}
else{
if(x<10){
return true;
}else{
while(parseInt(x/10)){
rev = rev * 10 + x % 10;
x = parseInt(x/10);
if(x <10){
rev = rev * 10 + x % 10;
}
}
}
if(rev == num || rev/10 == num){
return true;
}else{
return false;
}
}
};
有更好的想法的朋友,可以留言哦!一起进步!>_<
