「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
Hope is a good thing, maybe the best of things. And no good thing ever dies—— 《The Shawshank Redemption》
题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)
题目分析
- 字符串转换
将x从 Number 对象转成 String 对象,用String对象的方法split将String分割成Array,然后用Array对象的reverse方法进行翻转,再用Array对象的join方法将Array转成String,最后用parseInt将String变回 Number。
因为分割成字符数组的原因,最后一步处理的String在x<0时会失去结尾的负号,所以x<0时结果加负号
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
if (x === 0) return 0//零的话直接返回0
const XArr = String(Math.abs(x)).split('').reverse()//先将数字转为字符串,然后切割成为数组,再反转数组
let ans = 0// 定义一个变量
if (x > 0) {// 判断入参的正负值
ans += Number(XArr.join(''))//正值处理为正
} else {
ans -= Number(XArr.join(''))//负值处理为负
}
// 不满足限制条件 返回0
if (ans < Math.pow(-2, 31) || ans > Math.pow(2, 31) - 1) {
ans = 0
}
return ans
};
- 取余 反转数字,直接可以使用 取余 的方式,我们可以一边反转,一边检测,防止数字超过了最大限制或最小限制。
var reverse = function(x) {
let rev = 0;
while (x !== 0) {
const digit = x % 10;
x = ~~(x / 10);
rev = rev * 10 + digit;
if (rev < Math.pow(-2, 31) || rev > Math.pow(2, 31) - 1) {
return 0;
}
}
return rev;
};
~是js里的按位取反操作符,~~就是执行两次按位取反,其实就是保持原值
结语
如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。
文章如有错误之处,希望在评论区指正🙏🙏
欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后 」