문제
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 |
Comment