掘金团队号上线,助你 Offer 临门! 点击 查看详情
一、题目描述
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
假设环境不允许存储 64 位整数(有符号或无符号)。
eg1:
输入:x = 123
输出:321
eg2:
输入:x = -123
输出:-321
eg3:
输入:x = 120
输出:21
eg4:
输入:x = 0
输出:0
二、思路分析
思路一:转字符串反转
1.首先想到的是要分类讨论,分为 <0 和 >= 0
2.还要注意反转后的结果 是否在 [−2^31, 2^31 − 1]范围内
思路二:取余法
三、解题代码
- 思路一: 转字符串反转
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let result = x.toString().split('').reverse().join('')
if (x < 0) {
return -result < -Math.pow(2, 31) ? 0 : -result
}
return +result > (Math.pow(2, 31) - 1) ? 0 : +result
};
- 思路二: 取余法
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let abs = Math.abs(x) // 先取个绝对值,正负号留到后面判断
let now = 0
while(abs > 0) {
now = now * 10 + abs % 10 // 取余反转
abs = Math.floor(abs / 10)
}
if (x < 0) {
return now <= Math.pow(2, 31) ? -now : 0
} else {
return now > (Math.pow(2, 31) - 1) ? 0 : now
}
};
四、总结
- 主要考察数字的一些操作方法,例如Math.abs(), Math.pow()等等。
- 本题细心一点就好。