题目:
给你一个 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
var reverse = function(x) {
let a = 0
let b = 0
if(x > 0){
a = x.toString().split('').reverse().join('')
}else if(x < 0){
b = x * (-1)
a = b.toString().split('').reverse().join('')
a = -a
}else{
a = 0
}
return parseInt(a) >= -Math.pow(2, 31) && parseInt(a) < Math.pow(2, 31) - 1 ? parseInt(a) : 0
};
对于这道题,我首先得想法是把情况分为x>0,x<0,x = 0,以及对应情况下字符串末尾是否为零的情况,但这样的话,代码就会显得过于冗长,而且要做很多次判断,后来我想到,如果输入的数字末尾为零,结果翻转之后,零在首位,再用parseInt方法将字符串转为整数,这样首位的零会自动去掉,所以就先不用对末尾是否为零做出判断。
那么就分为两种情况:
x > 0 时,先将数字转换为字符串类型,再用js的内置方法split()将字符串分割,那么分割好的每一个字符都会放进一个数组当中,再使用Array的reverse()方法将数组进行翻转,再使用join()方法将数组拼接成字符串。
x < 0 时,先将数字转换成正数,因为带着符号进行转换字符串以及后续处理,可能会出现一些问题,所以我这里先转换成正数,然后进行同样的上述操作,最后利用a = -a 再把负号加回去。
x = 0 时直接返回0。
最后的返回值部分,我利用了三元运算符根据题目的要求做出了溢出判断,其中利用了Math内置对象的pow方法,pow方法接收两个参数:底数和指数,并返回底数的指数次幂。