# 反转整数

# 描述

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。

# 样例:

给定 x = 123,返回 321

给定 x = -123,返回 -321

给定 x = 1534236469, 返回 0


# 这题很简单,自己想一下!

# 这题很简单,自己想一下!

# 这题很简单,自己想一下!


# 解法:

  1. 最优:转字符串 再转数组进行操作
  2. 看到有人用四则运算+遍历反转整数,会把这个解法放到下面

# 提示:

整数溢出的值为Math.pow(2, 31) - 1Math.pow(-2, 31) + 1,转为数字:2147483647-2147483647

这部分跟位操作符,二进制有关,有兴趣可以去搜下。

# code:

  1. 转数组操作:
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
  1. 遍历,一位一位颠倒:
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

# 转数组操作运行效率也更高点:

# 点个Star支持我一下~