【力扣刷题记7】——《整数反转》

132 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

  1. 整数反转-难度中等

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123 输出:321 示例 2:

输入:x = -123 输出:-321 示例 3:

输入:x = 120 输出:21 示例 4:

输入:x = 0 输出:0

提示:

-2^31 <= x <= 2^31 - 1

二、题目和思路分析:

这道题看起来没什么难的,实际上做的时候你也会发现确实没什么难的。

数字转字符串,反转字符串,拼接该数字的符号(+ or -)

首先我们知道:在js中所能够被“安全”呈现的最大整数是 2^53 - 1,即 9007199254740991,在 ES6 中被定义为 Number.MAX_SAFE_INTEGER。最小整数是 -9007199254740991,在 ES6 中被定义为 Number. MIN_SAFE_INTEGER。

所以题目中的32 位的有符号整数的范围 [−2^31, 2^31 − 1] 在js中完全没问题,我们也不需要做额外的操作。

另外题目中【假设环境不允许存储 64 位整数(有符号或无符号)】这句话对js代码也没有限制力,大概是为了限制其他类型语言取巧的方法吧!

所以代码的实现也很简单:

三、代码:

代码实现如下:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    if(!x) return 0 // 如果是0则直接返回0
    let a = Math.abs(x).toString() // 数字取绝对值转字符串
    a = +(a.split('').reverse().join('')) // 翻转字符串
    if((Math.pow(-2,31) < a) && (a < (Math.pow(2,31) - 1))){ // 判断反转后是否在32位整数范围内
        return x<0? -a : a
    }else{
        return 0
    }
};

四、总结:

这道题的确比较简单,以至于我不敢相信就这么解答,哈哈哈哈,主要是今天刷题被前面看起来很简单的题目给搞怕了。

题目可能主要考察其他语言类型相关的知识,所以这道题用js来做的话应该被归为简单类型吧~

加油吧!

image.png