题目

给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 :

  1. 输入:x = 123
  2. 输出:321
  3. 输入:x = -123
  4. 输出:-321
  5. 输入:x = 120
  6. 输出:21
  7. 输入:x = 0
  8. 输出:0

提示:-2 <= x <= 2 - 1**

方法1

解题思路:

  1. result * 10 + x % 10 取出末位 x % 10(负数结果还是负数,无需关心正负),拼接到 result 中。
  2. x / 10 去除末位,| 0 强制转换为32位有符号整数。
  3. 通过 | 0 取整,无论正负,只移除小数点部分(正数向下取整,负数向上取整)。
  4. result | 0 超过32位的整数转换结果不等于自身,可用作溢出判断。

tip:32位有符数,与0进行或运算,会强制转换为整数,整数向下取整,负数向上取整,超过32位的整数,转换结果不等于自身。输入和输出都有可能大于32位。a | 0 可以将变量 a 中的数值转换为 32 位有符号整数,因为数位运算符 | 只适用于 32 位 整数(它只关心 32 位以内的值,其他的数位将被忽略)。因此与 0 进行操作即可截取 a 中 的 32 位数位。
运算过程:
image.png
代码:

var reverse = function(x) {
    let result = 0;
    while(x !== 0) {
        result = result * 10 + x % 10;
        x = (x / 10) | 0;
    }
    return (result | 0) === result ? result : 0;//解决溢出
};