反转整数

描述

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 (标记为 32 位整数)。

样例:

给定 x = 123,返回 321

给定 x = -123,返回 -321

给定 x = 1534236469, 返回 0


这题很简单,自己想一下!

这题很简单,自己想一下!

这题很简单,自己想一下!


解法:

  1. 最优:转字符串 再转数组进行操作
  2. 看到有人用四则运算+遍历反转整数,会把这个解法放到下面

提示:

整数溢出的值为Math.pow(2, 31) - 1Math.pow(-2, 31) + 1,转为数字:2147483647-2147483647

这部分跟位操作符,二进制有关,有兴趣可以去搜下。

code:

  1. 转数组操作:
const reverseInteger = 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;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  1. 遍历,一位一位颠倒:
const reverseInteger = function(n) {
  if (n === 0) return 0;
  let res = 0;
  while (n !== 0) {
    // 从个位起一位一位的颠倒
    res = res * 10 + (n % 10);
    n = parseInt(n / 10); // n除以10, 一位数转化完成 到最后小于1 被转成0 退出循环
  }
  if (res >= 2147483647 || res <= -2147483647) {
    return 0;
  }
  return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13

转数组操作运行效率也更高点:

github 算法仓库地址

2018.8.23

Last Updated: 9/7/2018, 2:54:53 PM