Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
- 整数反转-难度中等
给你一个 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来做的话应该被归为简单类型吧~
加油吧!