返回

JavaScript 中判断回文:一招搞定

前端

简介

回文是指正序和倒序读都相同的字符串或数字。在 JavaScript 中,判断一个整数是否为回文可以有多种方法。本文将介绍一种特别简洁的方法,只需一行代码即可完成任务。

实现

以下是判断整数是否为回文的 JavaScript 一行代码:

const isPalindrome = (x) => x.toString() === x.toString().split('').reverse().join('');

让我们逐行分解一下这段代码:

  • x.toString(): 将整数 x 转换为字符串,因为 JavaScript 没有内置的回文检测方法。
  • x.toString().split(''): 将字符串分割成单个字符的数组。
  • reverse(): 将数组中的字符顺序颠倒。
  • join(''): 将颠倒后的字符数组重新连接成一个字符串。
  • ===: 将原始字符串与颠倒后的字符串进行严格相等比较。

如果这两个字符串相等,则函数返回 true,表示 x 是回文;否则,返回 false

效率优化

这种方法在时间复杂度上是 O(n),其中 n 是输入整数的位数。这是因为将整数转换为字符串需要 O(n) 的时间,将字符串分割并颠倒也需要 O(n) 的时间。

为了优化效率,可以避免不必要的字符串转换。以下修改后的代码仅在需要时才将数字转换为字符串:

const isPalindrome = (x) => {
  if (x < 0) return false; // 负数不是回文
  const str = x + ''; // 仅当需要时才转换为字符串
  return str === str.split('').reverse().join('');
};

扩展

处理负数

默认情况下,该代码不处理负数。要处理负数,可以添加一个检查,在转换为字符串之前检查 x 是否小于 0。负数不是回文,因此可以立即返回 false

使用正则表达式

正则表达式也可以用来判断回文。以下代码使用正则表达式检测回文:

const isPalindrome = (x) => {
  const str = x + '';
  return str === str.match(/^(.)(.)*\1$/);
};

这个正则表达式从字符串开头匹配任意字符 ((.)),然后匹配任意数量的任意字符 ((.)*),最后匹配与第一个字符相同的字符 (\1)。

结论

判断整数是否为回文在 JavaScript 中可以有多种方法,其中最简单的方法之一是一行代码解决方案。本文介绍的方法高效且易于理解,可以在各种场景中使用。