给你一个 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 转为 数组 翻转后再 转化为 整数
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let str = '';
let y = x;
str += x; // 将整数转化为字符串
let arr = Array.from(str); // 将字符串转为数组
x = parseInt(arr.reverse().join('')); // 翻转数组 -> 转为字符串 -> 转为整数
if(y < 0) {
x = -x;
}
// 判断翻转后的整数是否超出范围
if(x > 2147483647 || x < -2147483648) {
return 0;
}
else {
return x;
}
};
- 化简一下
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
y = parseInt(Array.from(x.toString()).reverse().join('')); // 翻转
x = x >= 0 ? y : -y; // 判断符号
x = (x > 2147483647 || x < -2147483648) ? 0 : x; // 判断范围
return x;
};
- 方法二:
- 数学计算,每次取整数的尾数
- 判断溢出(要求环境不允许存储 64 位整数,但是判断这里感觉不严谨,js本身允许64位存储。。。)
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let rev = 0;
while (x !== 0) {
rev = rev * 10 + x % 10; // 取尾数加入
x = parseInt(x / 10); // 使用parseInt去除小数点后的数,保证取到的是整数
if (rev < -2147483648 || rev > 2147483647) { // 溢出判断
return 0;
}
}
return rev;
};