首页 > 其他 > 详细

整数反转

时间:2021-04-02 11:02:26      阅读:16      评论:0      收藏:0      [点我收藏+]

题干:

给你一个 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;
};

整数反转

原文:https://www.cnblogs.com/frank-link/p/14608822.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!