整数反转-题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。注意 : 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。来源:力扣(LeetCode)
示例1:
输入: 123 输出: 321
示例2:
输入: -123 输出: -321
实例3:
输入: 120 输出: 21
题解:
1.使用API
var reverse = function(x) {
let arr = x.toString().split('');
let len = arr.length;
let first = '';
if(isNaN(arr[0])){ //防止数字是带符号的
first = arr.shift();
}
while(arr[len-1] == 0){//防止末尾是0
arr.pop();
}
let final = (first + arr.reverse().join(''))*1;
return final >= Math.pow(-2,31) && final <= Math.pow(2,31) ? final : 0
};
解题思路:
主要是对API的调用,先将数字转为字符串,再将字符串转为数组,反转数组并转换为数字,最终判断反转后的数字是否在给定区间内,如果在区间内直接返回,如果不在区间内返回0。
2.数学方法
var reverse = function(x) {
let MAX = Math.pow(2,31);
let MIN= Math.pow(-2,31);
let isNegative = false; //判断是否为负数
if(x < 0){
isNegative = true;
x = Math.abs(x); //转换为正数处理
}
let cur = '';
while(x != 0){
cur += x % 10;
x = Math.floor(x/10)
console.log(cur,x)
}
cur = isNegative ? cur * -1 : cur * 1;
if(cur >= MAX || cur <= MIN){
return 0;
}else{
return cur;
}
};
解题思路:
采用数学方法,用当前数%10取得最后一位数,将取出的值存入cur中,然后将当前数/10,向下取整去掉最后一位,直到传入的值变为0为止,此时证明已经反转完毕,判断反转后的数是否在给定的区间内,如果在返回反转得到的数,如果不在返回0。