9. 回文数
题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
进阶:你能不将整数转为字符串来解决这个问题吗?
解答:
-
方法一:转换成字符串处理
时间复杂度:O(n),空间复杂度:xx
var isPalindrome = function (x) {
x = x.toString(); // 转换成字符串
let length = x.length;
let mid = Math.floor(length / 2);
for(let i = 0; i < mid; i++) { // 按序循环半个字符串进行比对
if(x[i] !== x[length - 1 -i]) {
return false
}
}
return true
};
-
方法二:通过余数处理
时间复杂度:O(n),空间复杂度:xx
核心思想:不改变数字类型,通过余数的方法进行取数
【注意⚠️】:每次取完数就把 x 的头尾数字减掉不可行 —> 例如10000021
,减掉头尾,数字直接变成 2
了
分析过程:
let isPalindrome = (x) => {
if(x < 0) {
return false
}
// 通过余数处理
let length = x.toString().length;
for(let i = 0; i < Math.floor(length / 2); i++) {
let left = parseInt(x / Math.pow(10, length - 1 - i)) % 10;
let right = parseInt(x % Math.pow(10, i + 1) / Math.pow(10, i));
if(left !== right) {
return false
}
}
return true
}