整数反转
题干:
给你一个 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;
};