整数反转
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路:
1:先用Math.pow()方法得到精度范围值,判断题干给的整数是否为0情况以及是否溢出。
2:消除题干给的整数不为0,不溢出后,分两种情况求解 (1):给的整数是负数(2)给的整数是正数。
3:用tostring(X)方法将整数x转为字符串,再用split()方法将字符串转为数组,再利用数组reverse()方法将数组反转,再用join()方法将数组转为字符串,最后用parseInt()方法将字符串转为数值。
4:如果给的整数是负数的话,就将反转后的整数乘-1,反之直接return反转得到的整数输出。
上具体代码:
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let flag = true; //定义一个信号量
let mins = Math.pow(-2,31);
let maxs = Math.pow(2,31) - 1;
//判断整数X是否为0
if(x==0) return 0;
//判断整数X数值范围是否超出[−2^31, 2^31 − 1]
if(x < mins || x > maxs) return 0;
//当X小于0的时候
if(x < 0){
x * -1;
flag = false;
}
//通过tostring()方法将整数X转为字符串,再用split()方法将字符串转为数组,再利用数组reverse()方法将数组反转,再用join()方法将数组转为字符串,最后用parseInt()方法将字符串转为数值。
let s = parseInt(x.toString().split("").reverse().join(""));
//当反转后的整数s溢出时
if(s < mins || s > maxs) return 0;
//当整数x小于0的时候
if(flag === false) return s * -1;
return s;
};