题目:
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例 :
输入:x = 123输出:321输入:x = -123输出:-321输入:x = 120输出:21输入:x = 0输出:0
方法1:
解题思路:
- result * 10 + x % 10 取出末位 x % 10(负数结果还是负数,无需关心正负),拼接到 result 中。
- x / 10 去除末位,| 0 强制转换为32位有符号整数。
- 通过 | 0 取整,无论正负,只移除小数点部分(正数向下取整,负数向上取整)。
- result | 0 超过32位的整数转换结果不等于自身,可用作溢出判断。
tip:32位有符数,与0进行或运算,会强制转换为整数,整数向下取整,负数向上取整,超过32位的整数,转换结果不等于自身。输入和输出都有可能大于32位。a | 0 可以将变量 a 中的数值转换为 32 位有符号整数,因为数位运算符 | 只适用于 32 位 整数(它只关心 32 位以内的值,其他的数位将被忽略)。因此与 0 进行操作即可截取 a 中 的 32 位数位。
运算过程:
代码:
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;//解决溢出
};
