[LeetCode-07]数字反转

150 阅读1分钟

数字反转

自己的写法:使用数组来进行反转

转成字符串,然后换成数组,最后一个个拿出来并且判断最后一位,只击败了6%的人...

var reverse = function (x) {
  let arr = x.toString().split("");
  let num = "";
 
  while (arr.length) {
    let a = arr.pop();
    if (arr.length === 0 && a === "-") {
      num = a + num;
    } else {
      num = num + a;
    }
  }
  let reverseX = parseInt(num)
  if (reverseX > Math.pow(2, 31) - 1 || reverseX < -Math.pow(2, 31)) {
    return 0;
  }

  return reverseX;
};

%10

可以使用%10将最后一位取出的方法,然后加入到新的数字中,这样也不用像字符串一样判断正负了

var reverse = (x) => {
  let res = 0;
  while (x) {
    res = res * 10 + (x % 10);
    if (res > Math.pow(2, 31) - 1 || res < Math.pow(-2, 31)) {
      return 0;
    }
    x = ~~(x / 10);
  }
  return res;

学到的知识

~~ => 取反两次,可以去掉小数 123 | 0 => 123 转成二进制按位或,可以去掉小数 唯一没有搞明白的是 Math.pow(2,31) | 0 = -2147483648 ? Math.pow(2,32) | 0 = 0