算法练习二:整数反转

题目:

给出一个 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 之间。

猜你喜欢

转载自blog.csdn.net/csx19911206/article/details/85373657