LeetCode算法题:整数反转(JavaScript)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aaaaaaliang/article/details/89199104

引用:https://leetcode-cn.com/problems/reverse-integer/

题目描述


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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

解决方案


方法:弹出和推入数字 & 溢出前进行检查

思路

我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。

算法

反转整数的方法可以与反转字符串进行类比。

我们想重复“弹出” x 的最后一位数字,并将它“推入”到 rev 的后面。最后,rev 将与 x 相反。

要在没有辅助堆栈 / 数组的帮助下 “弹出” 和 “推入” 数字,我们可以使用数学方法。

//pop operation:
const pop = x % 10;
x = parseInt(x/10);

//push operation:
temp = rev * 10 + pop;
rev = temp;

在这里插入图片描述
上面溢出情况,其实指的是 Java int类型是32位整数,最小值-231 最大值 231-1
在JavaScript中 Number其实是64位浮点数,最小值-(253-1) 最大值253-1

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let rev = 0;
    let max = Math.pow(2,31)-1
    let min = Math.pow(-2,31)
    
    while (x!==0){
        const pop = x % 10;
        x = parseInt(x/10);
        if(rev > max/10 || (rev===max/10 && pop>7)) return 0
        if(rev < min/10 || (rev===min/10 && pop>-8)) return 0
        rev = rev * 10 + pop
    }
    return rev
};

在这里插入图片描述

其他题解

摘自LeetCode如有侵权联系删除

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    var limt = Math.pow(2,31);
    var mul = 1;
    if( x < 0 ){
        mul = -1;
        x = x*mul;
    }else{
         limt -= 1;
    }
    var ret = 0;
    while(x>0){
        ret = ret * 10 + (x%10);
        x = parseInt(x/10);
    }
    if( ret > limt ){
        ret = 0;
    }
    ret =ret * mul;
    return ret;
};
/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    var max = Math.pow(2, 31) - 1
    var min = -Math.pow(2, 31)
    var res = 0
    if (a > max || a < min) {
      return 0
    }
    var a = parseInt(x) + ''
    if (a.indexOf('-') !== -1) {
      a = a.slice(1)
      res = 0 - a.split('').reverse().join('')
    } else {
      res = a.split('').reverse().join('') - 0
    }
    return (res > max || res < min) ? 0 : res
  };

```

猜你喜欢

转载自blog.csdn.net/aaaaaaliang/article/details/89199104