[Easy] 231. Power of Two

문제

Given an integer n, return true if it is a power of two. Otherwise, return false.

An integer n is a power of two, if there exists an integer x such that n == 2x.

 

예시

Example 1:

Input: n = 1
Output: true
Explanation: 20 = 1

Example 2:

Input: n = 16
Output: true
Explanation: 24 = 16

Example 3:

Input: n = 3
Output: false

 

제약조건

Constraints:

  • -231 <= n <= 231 - 1

 

Follow up: Could you solve it without loops/recursion?

 

풀이 과정

최대한 내 힘으로 풀어보고 싶어서 bit 연산자 없이 해결해보았다.

재귀 함수를 사용했다.

  • 먼저, n이 1이면 true를 반환했다. (1은 2의 0승이기 때문에)
  • 다음은 재귀 함수를 만들었다.
    • num === 1인 경우, 2로 나누어 떨어지는 것이기 때문에 true를 반환했다.
    • num !== 1이면서 num < 2인 경우, 2로 나누어 떨어지지 않은 것이기 때문에 false를 반환했다.
    • 재귀를 돌면서 num / 2 를 했다. 결과값은 반환해준다. (이 부분을 처리하지 않아서 자꾸 undefined가 떴다)
  • 재귀함수에서 반환된 false / true 값을 최종 반환한다.

풀이 코드

/**
 * @param {number} n
 * @return {boolean}
 */
var isPowerOfTwo = function(n) {
      if (n === 1) return true;

  const div = (num) => {
    if (num === 1) return true;
    else if (num < 2) return false;

    return div(num / 2);
  };

  return div(n);
};

 

'leetCode' 카테고리의 다른 글

[Easy] 136. Single Number  (2) 2022.05.25
[Easy] 190. Reverse Bits  (0) 2022.05.25
[Easy] 191. Number of 1 Bits  (0) 2022.05.24
[Medium] 120. Triangle  (0) 2022.05.23
[Medium] 198. House Robber  (0) 2022.05.23