这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
提示:
-231 <= x <= 231 - 1
解法1:结合数组
解题思路 既然是回文整数,那么先判断是不是一个数字,如果不是,直接返回 false;
将字符串转为一个数组,再将数组进行反转,并且深拷贝给另外一个变量,再将原来字符串转成的数组进行反转,变成原来的顺序。
如果是回文整数,在循环时,反转前后每一位的元素应该是一样的,所以不必全部遍历,只需要遍历一半即可。
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
let number = parseInt(x);
if(isNaN(number)) {
return false;
}
number = number.toString().split('');
let numberLen = number.length
numberJiOu = numberLen % 2 === 1 ? parseInt(numberLen / 2) : numberLen / 2,
numberRever = Array.from(number.reverse()),
numFlag = true;
number = number.reverse();
for(let i = 0; i < numberJiOu; i++) {
if(number[i] === numberRever[i]) {
numFlag = true;
} else {
return false;
}
}
return numFlag;
};
解法2:转换字符串
题目中又问道除了最基本的解法之外有没有其他的解法,比如利用字符串的知识。
步骤
1.转为字符串
2.转为数组
3.reserve
4.转为字符串
5.转为数字
6.判断是否相等
ps:如果是负数,那么 reserve 之后也是不等的,所以对结果不影响
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
return Number(String(x).split('').reverse().join('')) === x
};