Skip to content

回文数

简单

给你一个整数 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('');
};

如果不使用转换字符串的方法,可以使用数学运算,逐位比较数字的首尾数字,不断缩小范围。详细步骤如下

  1. 先进行几种特殊情况的处理:
  • 如果给定的数字小于 0,则一定不是回文数,直接返回 false。
  • 如果给定的数字大于 0 且个位数字为 0,那么首位数字和末位数字不会相等,也不可能是回文数,直接返回 false。
  1. 初始化两个变量:
  • reversedX:用于存储构建的反转后的数字,初始值为 0。
  • originalX:用于存储原始数字的备份,以便最后判断是否相等。
  1. 使用循环对数字进行处理:
  • 每次循环的过程中,取原始数字的最后一位(通过取模运算(x % 10)可以得到末位数字)。
  • 将末位数字添加到 reversedX 的末尾(通过乘以 10 再加上末位数字即可实现反转)。
  • 继续取整除运算(Math.floor(x / 10)),可以将原始数字的最后一位去除,缩小范围。
  • 循环继续,直到 x 的值变为 0,表示所有位数已经处理完毕。
  1. 最后,将 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;
};