Appearance
整数反转
中等
给你一个 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
题解
这道题目比较简单,可以直接使用反转字符串的方式,要注意的是对反转后的数字进行判断,如果超出了有效范围就返回 0,步骤如下
- 将原始整数转为字符串,反转字符串,再转回整数(如果原始数符号为负会去掉符号),赋值给一个新变量 reversed
- 根据原始整数的符号设置 reversed 的符号
- 判断 reversed 的值是否溢出 32 位有符号整数的范围,如果溢出返回 0,如果没溢出则返回 reversed
typescript
var reverse = function (x) {
let reversed = parseInt(x.toString().split("").reverse().join(""));
reversed = x < 0 ? -reversed : reversed;
if (reversed < Math.pow(-2, 31) || reversed > Math.pow(2, 31) - 1) {
return 0;
}
return reversed;
};
还有一种通过取余数的方法,步骤如下
- 取原始数的绝对值,命名为 absX
- 新建一个变量 reversed 用来保存结果,初始值为 0
- 使用 while 循环,每次循环通过取余数的方法取出 absX 每一位,个位,十位,百位...加给 reversed,并减去,直到absX的值变为0,循环结束
- 根据原始数的符号设置 reversed 的符号
- 判断 reversed 的值是否溢出 32 位有符号整数的范围,如果溢出返回 0,如果没溢出则返回 reversed
typescript
var reverse = function (x) {
let absX = Math.abs(x);
let reversed = 0;
while (absX > 0) {
let lastDigit = absX % 10;
reversed = reversed * 10 + lastDigit;
absX = Math.floor(absX / 10);
}
reverse = x < 0 ? -reverse : reverse;
if (reversed < Math.pow(-2, 31) || reversed > Math.pow(2, 31) - 1) {
return 0;
}
return reverse;
};