整数反转|刷题打卡

176 阅读1分钟

本文正在参与掘金团队号上线活动,点击 查看大厂春招职位

题目描述

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

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

思路分析

提到反转,就想到reverse方法,颠倒数组中元素的顺序。数字转字符串,再通过split方法分割成数组,reverse数组反转之后,再通过join拼成字符串,还要考虑到反转后的在32位整数范围内。

代码

因为存在负数的原因,先Math.abs(num)取绝对值,转成string类型,然后split('').reverse().join(''),转字符串,反转,重新拼成新的字符串,至此数字部分反转完成。

到这里其实就是字符串反转,如果遇到起始数字为120,那么反转之后是字符串012,还需要parseInt()方法转成int类型。

然后再根据源数据判断新的数据正负,以及新数据是否在32位整数范围内。

const reverse = function (num) {
    //取绝对值,转成string类型
    let s = Math.abs(num) + ''
    //字符串反转
    let newS = s.split('').reverse().join('')
    //判断正负,新的数字
    let newNum = parseInt(num < 0 ? '-' + newS : newS)
    //判断值所在范围
    if (newNum > Math.pow(2, 31) - 1 || newNum < Math.pow(-2, 31)) {
        return 0;
    } else {
        return newNum;
    }
}

总结

上面的实现是比较简单的方法,看到题目,脑海里浮现的思路,单从功能上来说,基本满足,但是parseInt的转换还存在溢出的问题, 更完美的方式还是得看官方的解题思路里用到的数学方面的知识。