仅记录自己刷题过程,顺便督促自我学习~
中等
题目描述
给你一个 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
提示:
- <= x <= - 1
我的实现
注意边界的判断,否则不能完全通过。
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let res=0;
if(x>=0){
res= x.toString().split('').reverse().join('');
}else{
res= x.toString().slice(1).split('').reverse().join('')*(-1)
}
if (res > 2 ** 31 - 1 || (res < 0 && res < (-2) ** 31)) return 0;
return res;
};
官方实现
var reverse = function(x) {
let rev = 0;
while (x !== 0) {
const digit = x % 10;
x = ~~(x / 10);
rev = rev * 10 + digit;
if (rev < Math.pow(-2, 31) || rev > Math.pow(2, 31) - 1) {
return 0;
}
}
return rev;
};
“~~”表示向下取整