Appearance
回文数
简单
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示: -231 <= x <= 231 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
题解
转换字符串的方法,把数字转换为字符串,反转字符串进行对比,并返回结果,代码如下
typescript
var isPalindrome = function (x) {
return x == String(x).split('').reverse().join('');
};
如果不使用转换字符串的方法,可以使用数学运算,逐位比较数字的首尾数字,不断缩小范围。详细步骤如下
- 先进行几种特殊情况的处理:
- 如果给定的数字小于 0,则一定不是回文数,直接返回 false。
- 如果给定的数字大于 0 且个位数字为 0,那么首位数字和末位数字不会相等,也不可能是回文数,直接返回 false。
- 初始化两个变量:
- reversedX:用于存储构建的反转后的数字,初始值为 0。
- originalX:用于存储原始数字的备份,以便最后判断是否相等。
- 使用循环对数字进行处理:
- 每次循环的过程中,取原始数字的最后一位(通过取模运算(x % 10)可以得到末位数字)。
- 将末位数字添加到 reversedX 的末尾(通过乘以 10 再加上末位数字即可实现反转)。
- 继续取整除运算(Math.floor(x / 10)),可以将原始数字的最后一位去除,缩小范围。
- 循环继续,直到 x 的值变为 0,表示所有位数已经处理完毕。
- 最后,将 originalX 和 reversedX 进行比较。如果两者相等,则原始数字是回文数,返回 true;否则,不是回文数,返回 false。
typescript
var isPalindrome = function (x) {
if (x < 0 || (x !== 0 && x % 10 === 0)) {
return false;
}
let reversedX = 0;
let originalX = x;
while (x > 0) {
reversedX = reversedX * 10 + (x % 10);
x = Math.floor(x / 10);
}
return originalX === reversedX;
};