# 整数反转

# 题目

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31,  2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -2^31 <= x <= 2^31 - 1

力扣🔗:https://leetcode-cn.com/problems/reverse-integer (opens new window)

# 解题思路

  • 首先取传入数字的绝对值,然后通过几个工具函数将其反转。
  • 完成上一步后,用得到的值与 0 进行 | 操作,如果该值超过 32 位,返回的结果将不等于该值本身,由此判断是否整数溢出。
  • 最后根据传入值的正负性,修改上一步得到的值并返回。

# 代码实现

/**
 * @param {number} x
 * @return {number}
 */
function reverse(x) {
  const r = +Math.abs(x)
    .toString()
    .split('')
    .reverse()
    .join('')

  return (r | 0) === r ? (x < 0 ? -r : r) : 0
}