算法练习二:整数反转

题目:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,  231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

解答:

        <script type="text/javascript">
            var reverseNum = function(num) {
                let str = num.toString()
                let arr = []
                let len = str.length
                if(num >= 0) {
                    for(let i = len -1; i >= 0; i--) {
                        arr.push(str[i])
                    }
                } else {
                    for(let i = len -1; i > 0; i--) {
                        arr.push(str[i])
                    }
                    arr.unshift('-')
                }
                let newNum = parseInt(arr.join(''))
                if(newNum <= Math.pow(-2, 31) || newNum >= Math.pow(2, 31) - 1) {
                    return 0
                }
                return newNum
            }
            console.log(reverseNum(-123))  //-321
            console.log(reverseNum(123))  //321
        </script>

解析:

首先将传进来的数字转换成字符串,然后使用遍历将每一个字符从后往前以此添加进数组。

之前判断数字是否大于等于0 这个涉及到数字前面是否有负号,有负号时,就不将负号添加进数组了(因为数组最后面一个是负号的话没有用),然后使用arr.unshift()方法在数组最前面添加一个负号进去。

在使用parseInt(arr.join('')),先将字符串数组分割成字符串,再转换成数字,最后判断数字是否在-2^31与2^31 -1 之间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值