Skip to content

整数反转

中等

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

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

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

题解

这道题目比较简单,可以直接使用反转字符串的方式,要注意的是对反转后的数字进行判断,如果超出了有效范围就返回 0,步骤如下

  1. 将原始整数转为字符串,反转字符串,再转回整数(如果原始数符号为负会去掉符号),赋值给一个新变量 reversed
  2. 根据原始整数的符号设置 reversed 的符号
  3. 判断 reversed 的值是否溢出 32 位有符号整数的范围,如果溢出返回 0,如果没溢出则返回 reversed
typescript
var reverse = function (x) {
  let reversed = parseInt(x.toString().split("").reverse().join(""));
  reversed = x < 0 ? -reversed : reversed;
  if (reversed < Math.pow(-2, 31) || reversed > Math.pow(2, 31) - 1) {
    return 0;
  }
  return reversed;
};

还有一种通过取余数的方法,步骤如下

  1. 取原始数的绝对值,命名为 absX
  2. 新建一个变量 reversed 用来保存结果,初始值为 0
  3. 使用 while 循环,每次循环通过取余数的方法取出 absX 每一位,个位,十位,百位...加给 reversed,并减去,直到absX的值变为0,循环结束
  4. 根据原始数的符号设置 reversed 的符号
  5. 判断 reversed 的值是否溢出 32 位有符号整数的范围,如果溢出返回 0,如果没溢出则返回 reversed
typescript
var reverse = function (x) {
  let absX = Math.abs(x);
  let reversed = 0;
  while (absX > 0) {
    let lastDigit = absX % 10;
    reversed = reversed * 10 + lastDigit;
    absX = Math.floor(absX / 10);
  }

  reverse = x < 0 ? -reverse : reverse;
  if (reversed < Math.pow(-2, 31) || reversed > Math.pow(2, 31) - 1) {
    return 0;
  }

  return reverse;
};