题目详情:
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
示例:
输入:x = 123
输出:321
解题思路:
使用循环将给定整数 x
的数字部分进行反转。首先定义一个变量 result
来存储反转后的结果,初始值为 0。
然后不断取 x
的个位数字,并将其添加到 result
中。具体做法是,每次循环通过取余操作 x % 10
获取 x
的个位数字,并将其加到 result
中。同时需要更新 x
,将已经处理过的个位数字去除,即通过整除操作 Math.trunc(x / 10)
。
在每次循环中都判断反转后的整数 result
是否超出了有符号 32 位整数的范围。如果是,则直接返回 0。
最后,函数返回反转后的结果 result
。
代码实现:
function reverse(x) {
let result = 0;
while (x !== 0) {
// 取出 x 的个位数字
const digit = x % 10;
// 将个位数字添加到结果中
result = result * 10 + digit;
// 判断反转后的整数是否超出范围
if (result < Math.pow(-2, 31) || result > Math.pow(2, 31) - 1) {
return 0;
}
// 更新 x,去除已经处理的个位数字
x = Math.trunc(x / 10);
}
return result;
}
// 示例输入
const x = 123;
// 调用函数获取反转后的结果
const result = reverse(x);
// 输出结果
console.log(result);