「前端刷题」7. 整数反转

857 阅读1分钟

这是我参与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