题目描述
题目要点
1,给定的是整数,有正有负
2,将数字反转之后,数的正负性不变
3,反转之后的数字前面不能有0
4,当结果溢出时返回0
解法一
思路:看到反转,立马想到了js中数组的一个方法,reverse();想要用这个方法必然先把数字变成数组,这个过程是先将数字变成字符,再变成数组,这样再把数组反转,然后判断首元素是否是0 ,如果是0,就用shift将其删除(在这里感叹一下,数组真好!),然后再将数组转化成数字,这里还要注意的一点是要对正负数进行不一样的处理,然后还要判断一下溢出的时候要输出0
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
var Reverse=function(){
arr=x.toString().split('');
arr=arr.reverse();
while(arr[0]==0){
arr.shift();
}
arr=arr.join('');
arr=Number(arr);
return arr;
}
if(x>0){
Reverse();
if(arr>2147483647)
return 0;
return arr;
}
else{
x=-x;
Reverse();
if(arr>2147483647)
return 0
return -arr;
}
}
解法二
思路:
感觉解法一还是太曲折了一点,为了偷懒用数组的reverse方法,反而走了很多弯路。解法二是这样的:通过将数字对10取余依次反转数字,将得到的数字存在变量中,每一次尾部的数据,之前保存在变量中的数据就要成乘10,向前移动一位;
2的31一次方,可以用Math.pow(2,31)来表示
代码:
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
var temp=0;
while(x){
temp=temp*10+x%10;
x=parseInt(x/10);
}
if(temp>Math.pow(2,31) || -temp>Math.pow(2,31)){
return 0;
}
return temp;
}