题目描述
给你一个 32 位的有符号整数 x ,返回 x 中每位上的数字反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。
链接:整数反转
思路分析
刚刚拿到这题的时候,就想到了数组反转方法reverse,然后就想着把数字先转成字符串然后拆分为数组,通过reverse()方法反转数组然后再join()一起
我的代码
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
if(x>=-(2**31) && x<= (2**31-1)){
let arr = Math.abs(x).toString().split('')
if(arr.length==1){
return x
} else {
let tempArr = arr.reverse()
if(tempArr[0]==0) tempArr.unshift(0)
let num = x>0?tempArr.join(''):'-'+tempArr.join('')
if(parseInt(num)>=-(2**31) && parseInt(num)<= (2**31-1)){
return num
} else {
return 0
}
}
}else {
return 0
}
};
最后在得到反转之后的整数来判断大小是否在规定范围内,再返回相应值。发现我写的代码有点麻烦,看了下别人的代码特别简单,没有if-else判断
大神代码
var reverse = function(x) {
let result = 0
while(x!=0){
result = result*10 + x % 10 //取余
x = (x/10)|0 //去除小数点
}
return (result | 0) == result ? result : 0 //(result | 0)判断是否溢出
}
以上代码先取x最后一位,然后对x取整操作,然后一直循环
总结
还是别人的代码简单,主要是利用了或运算符 | 和取整取余的巧妙运算。