题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路
思路一 按部就班
我们只需要按照
- 首先判断这个数的符号
- 对该数的绝对值进行转换(先转换为数组,然后反转,然后变回字符串)
- 限定数值范围
- 如果超出范围,直接返回0,没有超出的话添加符号返回值。
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
// 符号判断
var sign = Math.sign(x) === -1 ? true : false
// 反转并添加符号
var res = (Math.abs(x) + '').split('').reverse().join('')
res = sign ? -res : res
var max = Math.pow(2,31)
var min = Math.pow(-2,31)
if(res > max || res < min ){
return 0
}else{
return res
}
};
思路二 取余法
321是如何从123变化而来的呢?我们可以让 123 对10 不断的取余数:
- 123 % 10 = 3
- [ 123 / 10 ] % 10 = 2
- [ 12 / 10 ] % 10 = 1
可得结果 321,因此,我们只需要对给定的整数,不断的进行取模和除法运算, 不断的将累计结果进位即可。
var reverse = function(x) {
var ord = Math.abs(x)
var res = 0
while(ord > 0){
res = res * 10 + ord % 10
ord = Math.floor(ord / 10)
}
var max = Math.pow(2,31)
if(x < 0){
return res <= max ? -res : 0
}else{
return res < max ? res : 0
}
};