LeetCode 7

Reverse Integer

문제 출처

문제

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

Input: 123
Output: 321
Example 2:

Input: -123
Output: -321
Example 3:

Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

나의 코드

function reverse(x: number): number {
  const parsed: string = x.toString();
  const array: string[] = parsed.split("");

  let left: number = array[0] === "-" ? 1 : 0;
  let right: number = array.length - 1;
  let temp: string;

  while (left < right) {
    temp = array[left];
    array[left] = array[right];
    array[right] = temp;

    left++;
    right--;
  }

  const answer: number = Number(array.join(""));

  if (Math.pow(-2, 31) > answer || answer >= Math.pow(2, 31) - 1) return 0;
  else return answer;
}

참고 코드

var reverse = function (x) {
  const reversed =
    parseInt(Math.abs(x).toString().split("").reverse().join("")) *
    Math.sign(x);
  return reversed <= 0x7fffffff && reversed >= -0x80000000 ? reversed : 0;
};

배운점

2^31 은 2진법으로 10 31 개로 이루어진 수이다. (10^61 과 0` 6개로 이루어진 것 생각하면 됨)

4 bit 씩 나누면 16진수가 된다. => 2^31 = 0x80000000 (0x 는 16 진수 표현법 > 링크)

1을 빼면 0x7fffffff