反转整数

137 阅读1分钟

参与活动得徽章 juejin.cn/topic/68247…

给你一个 32 位的有符号整数 x, 返回将 x中的数字部分反转后的结果。 如果反转后整数超过32位的有符号整数的范围 [231,2311][-2^{31}, 2^{31}-1],就返回 0。

先来个低配版的

function reverse(x) {
    const max = 2 ** 31 - 1;
    const min = -(2 ** 31);
    if(x > max || x < min) return 0;
    const flag = x < 0 ? -1 : 1;
    const r = (x * flag).toString().split('').reverse().join('') * flag;

    if(r > max) return 0;
    if(r < min) return 0;
    console.log(r)
    return r;
}

再来个升级版本

function reverse(x) {
    const max = 2 ** 31 - 1;
    const min = -(2 ** 31);
    if(x > max || x < min) return 0;
    let r = 0;
    while(x !== 0) {
        r = r * 10 + x % 10;
        x = (x/10) | 0
    }
    if(r > max || r < min) return 0;
    return r;
}

x % 10 取最后一位

r * 10 给 r 往前移一位

x = (x/10) | 0 去掉 x 的最后一位取整