js 整数反转 算法 面试题

难度:简单

给你-个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

代码实现:

1、数学方式

2、字符串反转的方式

通过数学方式 获得的算法

<!DOCTYPE html>
<html>
<head>
 <meta charset=utf-8 />
 <title>js 整数反转 算法 面试题 xinbiancheng.cn</title>
</head>
<body>
</body>
<script type="text/javascript">
 function reverse(x) {
  let INT_MAX=2147483648; //2的31次方
  let INT_MIN=-2147483647 //-2的31次方
  let rev = 0;
  while (x != 0) {
   let remainder  = x % 10;
   x = parseInt(x/10);
   if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && remainder  > 7))
    return 0;
   if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && remainder  < -8))
    return 0;
   rev = rev * 10 + remainder;
  }
  return rev;
 }
 console.log(reverse(123));
 console.log(reverse(-123));
 console.log(reverse(120));
 console.log(reverse(0));
 console.log(reverse(2147483648));
</script>
</html>

注意:js中通过 / 做除法运算时有可能出现小数,所以需要 parseInt 转换成 整数

通过 console.log 输出结果如下:

321
-321
21
0
0

通过js reverse 反转 数组,然后通过 join('') 连接成字符串

<!DOCTYPE html>
<html>
<head>
 <meta charset=utf-8 />
 <title>js 整数反转 算法 面试题 xinbiancheng.cn</title>
</head>
<body>
</body>
<script type="text/javascript">
/**
 * @param {number} x
 * @return {number}
 */

 var reverse = function(x) {
    // x ->num
    var str = x.toString() //str->String

    let arr = str.split(''); //arr->Array
    // 判断是否有负号
    if(arr[0]!=="-"){
     let num =Number(arr.reverse().join(''));
     if(num <= 2147483647){
      return num;
     }else{
      return 0
     }
    }else if(arr[0]==="-"){
     delete arr[0];

     let num =Number(arr.reverse().join(''));
     num=0-num;
     if(num >= -2147483648){
      return num;
     }else{
      return 0
     }
    }
   };

   console.log(reverse(123));
   console.log(reverse(-123));
   console.log(reverse(120));
   console.log(reverse(0));
   console.log(reverse(2147483648));
  </script>
  </html>

通过 console.log 输出结果同上