给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
var s = null;
var flag = '';
var min = -Math.pow(2, 31);
var max = Math.pow(2, 31) - 1;
if (x >= 0) {
s = String(x).split('').reverse().join('');
} else {
flag = '-'
s = String(x).substr(1).split('').reverse().join('');
}
var result = Number(flag + s)
if (result >= min && result <= max) {
return result
} else {
return 0
}
};
常规思路,把数字转换为字符串,如果是负数需要把打头的负号去掉,然后字符串本身是不能逆转的,通过split函数转换为字符数组再逆转,最后再还原成字符串,并转成数字,由于数组和字符串的特殊性,整个调用可以写成链式,注意边界条件不是Number.MAX_VALUE和Number.MIN_VALUE,而是−2^31,2^31 − 1