leetcode整数反转(每日计划)

78 阅读1分钟

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

示例 1:

输入: 123
输出: 321

 示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

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

我的算法实现:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function (x) {
  let y = Math.abs(x)
  let reverseDigit = y % 10;
  for (let i = Math.floor(y / 10); i !== 0; i = Math.floor(i / 10)) {
    reverseDigit = (reverseDigit * 10) + i % 10;
  }
  reverseDigit = (x > 0 ? 1 : -1) * reverseDigit
  return (reverseDigit | 0) === reverseDigit ? reverseDigit : 0
};

最后不是我想到的,我自己测试了一下发现即便超过了也能正常,所以也就不知道怎么应对了,但是这个作者的方法很独到,跟0进行与运算,不管原来那个数是啥,得到的都是32位的数。而如果是超过32位的,那么就会被截掉一部分,自然此时就不相等了。


来源:力扣(LeetCode)