本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
输入: x = 123
输出: 321
解题思路
思路一
我们先进行判断若输入整数x是大于0的,则先把整数x转换为字符串,再分割成字符串数组, 然后进入for循环,依次往数组s中添加t中的末尾元素,添加完毕后,把数组转换为字符串,然后转换为数字,如果此时s的值大于2的31次方减一,就返回0,否则返回s,若输入整数x是小于0的,则步骤相同,只不过初始数组s中有初值 '-',最后使用三目运算符,若s小于-2的31次方,则返回0,否则返回s
var reverse = function(x) {
if (x >= 0) {
let t = x.toString().split('');
let n = t.length;
let s = []
for (let j = n - 1; j >= 0; j--) {
s.push(t[j])
}
s = s.join('')
s = Number(s)
return s>(Math.pow(2,31)-1)? 0 : s
}
else {
let t = x.toString().split('');
let n = t.length;
let s = ['-']
for (let j = n - 1; j >0; j--) {
s.push(t[j])
}
s = s.join('')
s = Number(s)
return s<Math.pow(-2,31)? 0 : s
}
};
思路二
我们可以通过Math.abs(x)取x的绝对值,判断x是否为负数,是则提取x的符号,得到反转后的数组,对[1]所得数字split成数组,再reverse反转,用join处理[3]所得数组, 得到结果后将[2]与[4]转为数字, 判断数字是否符合,是则返回[5],否则返回 0
var reverse = function(x) {
var prefix = '';
var absX = Math.abs(x);
if (x < 0) {
prefix = '-';
}
var arr = String(absX).split('');
var reverseArr = arr.reverse();
var reverseStr = reverseArr.join('');
const result = Number(prefix + reverseStr);
if (result < Math.pow(-2, 31) || result > (Math.pow(2, 31) - 1)) {
return 0;
} else {
return result;
}
};