Loading

整数反转

题干:

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

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

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

示例 1
输入:x = 123
输出:321
示例 2
输入:x = -123
输出:-321
示例 3
输入:x = 120
输出:21
示例 4
输入:x = 0
输出:0
Tips:
  • -231 <= x <= 231 - 1

Solution:

暴力解法:
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
  const flag = x > 0 ? 1 : -1;
  x = flag > 0 ? x : -x;

  const res = Number((x + "").split("").reverse().join().replace(/,/g, ""));
  const border = Math.pow(2, 31);
  if (res > border || res < -border - 1) {
    return 0;
  }
  return res * flag;
};
模拟栈:
思路
  • result * 10 + x % 10 取出末位 x % 10(负数结果还是负数,无需关心正负),拼接到 result 中。

  • x / 10 去除末位,| 0 强制转换为 32 位有符号整数。

  • 通过 | 0 取整,无论正负,只移除小数点部分(正数向下取整,负数向上取整)。

  • result | 0 超过 32 位的整数转换结果不等于自身,可用作溢出判断。

Tips:参考 js 位运算符
/**
 * @param {number} x
 * @return {number}
 */
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;
};
posted @ 2021-04-01 23:49  Frank-Link  阅读(92)  评论(0编辑  收藏  举报