问题描述
给你一个 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
解题思路
这个问题其实也是个for循环的问题,好多前端人,包括我自己下意识会想要用js的某些语法去处理,比如说用js的reverse语法
let reversed = parseInt(x.toString().split('').reverse().join(''))
这个思维定式一定要改回来,转数组再转换回来,这个语法本身的时间复杂度就很高,所以最好用原生的js的for循环语法,数字反转的话应该要想到在循环中一步步的除以10,然后处理结果和余数
代码实现
function reverseInteger(x) {
const INT_MAX = 2**31 - 1;
const INT_MIN = -2**31;
let result = 0;
while (x !== 0) {
// 取出x的最后一个数字
let digit = x % 10;
// 将结果乘以10并加上最后一个数字
result = result * 10 + digit;
// 移除x的最后一个数字
x = Math.trunc(x / 10); // 取整
}
// 检查结果是否在32位有符号整数的范围内
if (result > INT_MAX || result < INT_MIN) {
return 0;
}
return result;
}