题目
- 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
- 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,121 是回文,而 123 不是。
解题
1、简洁做法
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
return x == x.toString().split("").reverse().join("")
};
2、字符串思路
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
return ((s) => {
let i = 0
let j = s.length - 1
while (j >= i) {
if (s[i] === s[j]) {
i ++
j --
} else {
return false
}
}
return true
})(x.toString());
}
3、for循环
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if(x>=0&&x<=(Math.pow(2,31)-1)){
var y = x;
var n=0;
var len = x.toString().length;
for(let i=0;i<len;i++){
n = n*10+x%10;
x=parseInt(x/10);
}
if(n==y){
return true;
}
else{
return false;
}
}
return false;
}
4、容易理解
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
if (x < 0) return false
let a = 0, b = x;
while(x > 0) {
a = a * 10 + x % 10
// x = x / 10 | 0
x = (x - x % 10) / 10;
}
return a === b
}
5、字符串转换成数组思路
问:你能不将整数转为字符串来解决这个问题吗?
答:能!
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
//1.把回文字符串转换成数组
let strArr = x.toString().split('');
//2.接收结果的数组
let result = [];
//3.循环判断 从首位开始的字符 是否和 末尾数递减的字符相等
for (let i = 0, j = 1; i < strArr.length; i++) {
if (strArr[i] == strArr[strArr.length - j]) {
result.push(true);
} else {
result.push(false);
}
j++;
}
//4.判断结果数组是否存在不相等的结果,如果有返回false;
for (let i = 0; i < result.length; i++) {
if (result[i] == false) {
return false;
}
}
//没有则返回true;
return true;
};