5-整数反转Reverse Integer

题目

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

示例 1:

输入: 123 输出: 321

示例 2:

输入: -123 输出: -321

示例 3:

输入: 120 输出: 21 注意:

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

解答

先转成字符串,通过array反转

  1. 如果是正数,就反转

  2. 如果是负数,就拆了负号,反转,再按回负号

  3. 提交前判断溢出的情况

作者:cuidingfeng 链接:https://leetcode-cn.com/problems/two-sum/solution/jszheng-shu-fan-zhuan-by-cuidingfeng/

var reverse = function(x) {
  let sign = "",
    result;
  if (x < 0) {
    sign = "-";
    x = -x;
  }
  result = x
    .toString()
    .split("")
    .reverse()
    .join("");
  if (
    result.length > 10 ||
    (result.length === 10 && result > (x < 0 ? "2147483648" : "2147483647"))
  ) {
    return 0;
  } else {
    return sign + result;
  }
};

Runtime: 68 ms, faster than 94.53% of JavaScript online submissions for Reverse Integer.

Memory Usage: 35.9 MB, less than 45.88% of JavaScript online submissions forReverse Integer.

直接操作数字反转

探险过程

题目意思是,给一串数字,按位反着输出,如果在 [−$2^{31}$, $2^{31}$ − 1]之外,就输出0。 那么数字怎么反着输出呢? 记得数组有反转的方法:.reverse() 所以思路是:数字转数组,数组反一下,再转回数字。 不过number[]转回数字好像不太方便,因此就用字符串过渡一下。

var reverse = function(x) {
  let sign = "";
  if (x < 0) {
    sign = "-";
    x = -x;
  }
  const reverse = x
    .toString()
    .split("")
    .reverse()
    .join("");
  if (reverse > (x > 0 ? 2147483647 : 2147483648)) {
    return 0;
  }
  return parseInt(sign + reverse, 10);
};

Runtime: 80 ms, faster than 68.53% of JavaScript online submissions forReverse Integer.

Memory Usage: 36 MB, less than 36.74% of JavaScript online submissions for Reverse Integer.

想办法优化一下? if判断的时候可以没必要直接计算reverse的值,可以先判断长度。

  • 长度长于10,必然溢出

  • 长度等于10,再上判断

...
    if (
    result.length > 10 ||
    (result.length === 10 && result > (x < 0 ? "2147483648" : "2147483647"))
  ) {}
...

测试代码

const reverse_test = () => {
  for (let index = 0; index < testData.length; index++) {
    const test = testData[index];
    const ans = parseInt(reverse(test.nums), 10); 
    // 用parseInt把字符串转number,最好要加个后缀

    ensure(ans, test.ans, "reverse" + index);
  }
};

Last updated

Was this helpful?