用JavaScript刷leetcode —— 整数反转

1,111 阅读2分钟

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例

输入: 123
输出: 321

输入: -123
输出: -321

输入: 120
输出: 21

分析

环境的最大整数数值跟最小整数数值超过范围溢出 需要返回0 做处理

算法

在js中有一个数组的反转方法reverse v8中的具体实现看源码的时候看的我的表情就是这个样子🤤 真香我都看湿了。里面根据运行时判断执行那种方式去进行反转 写了三种反转方式 不同的方式效率不一样。 简单来说就是根据数组下标进行互换 同理我们也可以根据这样的方法进行反转整数,先将整数转字符串在操作字符串数组

const reverse = (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;
}

reverse(1234560)  //654321

代码里的+[...n]部分利用了js的隐式转换将字符串类型转成数字类型,当然这种转来转去的方法太麻烦了我们可以用数学的方法来解决

var reverse = function (x) {
    if (x === 0) return 0;
    let result = 0;
    while (x !== 0) {
        result = result * 10 + x % 10;
        x = parseInt(x / 10);
    }
    if (result >= 2147483647 || result <= -2147483647) {
        return 0;
    }
    return result;
};

我们可以把整数想成栈的操作例如 要注意除10结果需要返回整数

推出
pop = x % 10;
x /= 10;

压入
temp = rev * 10 + pop;
rev = temp;

这样就完成了整数的反转

有更好的意见欢迎留言