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