LeetCode刷题-整数反转

177 阅读1分钟

「这是我参与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对象的方法splitString分割成Array,然后用Array对象的reverse方法进行翻转,再用Array对象的join方法将Array转成String,最后用parseIntString变回 Number

因为分割成字符数组的原因,最后一步处理的Stringx<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里的按位取反操作符,~~ 就是执行两次按位取反,其实就是保持原值

结语

如果这篇文章帮到了你,欢迎点赞👍和关注⭐️。

文章如有错误之处,希望在评论区指正🙏🙏

欢迎关注我的微信公众号,一起交流技术,微信搜索 🔍 :「 五十年以后