这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
题目
给你一个 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
解题思路
思路1
反转数字,我们首先想到的就是取余,但是可能会遇到反转后,数字超过了最大限制或最小限制。
所以我们可以一边反转,一边检测,这样做的话,若遇到问题,将会立即停止。
代码
var reverse = function(x) {
let res = 0;
while(x){
res = res * 10 + x % 10;
if(res > Math.pow(2, 31) - 1 || res < Math.pow(-2, 31)) return 0;
x = ~~(x / 10);
}
return res;
};
思路2
将x从Number对象转成String对象,用String对象的方法split将String分割成Array,然后用Array对象的reverse方法进行翻转,再用Array对象的join方法将Array转成String,最后用parseInt将String变回Number。
因为分割成字符数组的原因,最后一步处理的String在x<0时会失去结尾的负号,所以x<0时结果加负号。
/**
* @param {number} x
* @return {number}
*/
var reverse = function (x) {
let y = parseInt(x.toString().split("").reverse().join(""));
if (x < 0)
y = - y;
return y > 2147483647 || y < -2147483648 ? 0 : y;
};
最后
曾梦想仗剑走天涯
看一看世界的繁华
年少的心总有些轻狂
终究不过是个普通人
无怨无悔我走我路
「前端刷题」No.7