题目:整数反转

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

示例1

输入: 123
输出: 321

示例 2

输入: -123
输出: -321

示例 3

输入: 120
输出: 21

注意: 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer/

解题思路

数字反转可以使用栈推出的思路去解决,以数字123为例:

  • 123%10会得到最后一位数字3,推出3后需要要继续推出2,那么可以用123/103删除掉,继续用12%102推出来,推出后原先的3要先乘以10再与2相加,即3*10+2=32,以此类推就可以把数字反转过来
  • 在推出过程中也需要判断推出组合的新数字有没有溢出,如果溢出则直接返回0,没有则继续上一步循环

代码实现

const reverse = (x) => {
    let res = 0,
        min = Math.pow(-2, 31),
        max = Math.pow(2, 31) - 1;
    while (x) {
        res = res * 10 + x % 10;
        x = parseInt(x / 10);
        if(res < min || res > max) return 0
    }

    return res
};