# 反转整数
# 描述
将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。
# 样例:
给定 x = 123,返回 321
给定 x = -123,返回 -321
给定 x = 1534236469, 返回 0
# 这题很简单,自己想一下!
# 这题很简单,自己想一下!
# 这题很简单,自己想一下!
给
你
点
时
间
想
一
下
# 解法:
- 最优:转字符串 再转数组进行操作
- 看到有人用四则运算+遍历反转整数,会把这个解法放到下面
# 提示:
整数溢出的值为Math.pow(2, 31) - 1
和Math.pow(-2, 31) + 1
,转为数字:2147483647
和-2147483647
这部分跟位操作符,二进制有关,有兴趣可以去搜下。
# code:
- 转数组操作:
const reverseInteger = n => {
if (n < 0) {
n = n.toString().split('-')[1]; // 负数提取数字
n = '-' + [...n].reverse().join('');
n = +n; // 转数字
} else {
n = n.toString(); // 转字符
n = +[...n].reverse().join(''); // 转为数组 颠倒数组 再合字符 最后转数字
}
if (n >= Math.pow(2, 31) - 1 || n <= Math.pow(-2, 31) + 1) {
// 判断溢出
return 0;
}
return n;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 遍历,一位一位颠倒:
const reverseInteger = function(n) {
if (n === 0) return 0;
let res = 0;
while (n !== 0) {
// 从个位起一位一位的颠倒
res = res * 10 + (n % 10);
n = parseInt(n / 10); // n除以10, 一位数转化完成 到最后小于1 被转成0 退出循环
}
if (res >= 2147483647 || res <= -2147483647) {
return 0;
}
return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13