🍧 leetcode刷题之【整数反转】

291 阅读1分钟

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战


写在前面:

  • 个人前端网站:zhangqiang.hk.cn
  • 欢迎加入博主的前端学习qq交流群::706947563专注前端开发,共同学习进步

1 题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例4:

输入:x = 0
输出:0

提示:

  • -231 <= x <= 231 - 1

2 解析1 (本人的代码)

2.1 解题思路

首先,将这个整理分解逆序放到一个数组里,然后再将数组里的每个数依次组合成新数,则为反转的数。

细节

(1) 要记录符号位是否小于0,后面要乘以-1将其变成负数;

(2) 逆序后的数判断是否超过范围;

(3) 123/10 得到的结果是12.3,我们要加个parseInt()取整才行;

(4) 这个点我找了好久才发现! -5%2 得到的结果是 -1 !也就是说,负数取余,得到的还是负数,这个问题就很大了,那么应该在一开始判断是否为负数,然后再用Math.abs()将其变为正数。

2.2 代码

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let tempArr=[],reverseNum=0,valueSymbol=1;
    if(x<0){
        valueSymbol=-1;
        x=Math.abs(x);
    }
    while(x){
        tempArr.push(x%10);
        x=parseInt(x/10);
    }
    tempArr.map((item)=>{
        reverseNum=reverseNum*10+item;
    })
    reverseNum=valueSymbol===-1?-reverseNum:reverseNum;
    if(reverseNum>Math.pow(2,31)-1||reverseNum<-Math.pow(2,31)){
        return 0;
    }
​
    return reverseNum;
};

3 解析2 (大佬的代码)

 /**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
    let y = parseInt(x.toString().split("").reverse().join(""));
    if (x < 0)
        y = - y;
    return y > 2147483647 || y < -2147483648 ? 0 : y;
};

大佬的代码言简意赅。 但是自己的代码还是要看的,因为那才是自己的真实水平,膜拜大佬,像大佬学习!

4 参考解析及知识点

大佬的解析:leetcode-cn.com/problems/re…