Description
주어진수가 2의 제곱에 포함되는지 여부를 반환하는 문제입니다.
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:2^0 = 1
Example 2:
Input: n = 16
Output: true
Explanation:2^4 = 16
Example 3:
Input: n = 3
Output: false
Constraints:
- -2^31 <= n <= 2^31 - 1
Solution 1. 비트 연산
public boolean isPowerOfTwo(int n) {
//1. bit manipulation
if (n <= 0) return false;
return (n - 1 & n) == 0;
}
비트연산을 통해 2의 제곱 값인지를 확인합니다.
n > 16-> 2^4 -> 0010000
n-1 > 1101111
위 두값을 AND(&)연산할 경우 비트가 변환되어 값이 0이 될경우는 2의 제곱값이라고 할 수 있습니다.
Solution 2. Iteration(반복문)
public boolean isPowerOfTwo2(int n) {
//2. Iteration
int num = 1;
for (int i = 1; i < 31; i++) { //2^31까지만 표현가능
if(n == num)return true;
num *= 2;
}
return false;
}
}
단순 반복문으로 실제로 31비트의 크기까지 2를 곱해가며 값이 맞는지 확인해보는 방법도 있습니다.
Reference
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 190. Reverse Bits - 문제풀이 (0) | 2022.02.15 |
---|---|
[LeetCode] 191. Number of 1 Bits - 문제풀이 (0) | 2022.02.15 |
[LeetCode] 235. Lowest Common Ancestor of a Binary Search Tree - 문제풀이 (0) | 2022.02.14 |
[LeetCode] 653. Two Sum IV - Input is a BST - 문제풀이 (0) | 2022.02.14 |
[Leetcode] 98. Validate Binary Search Tree - 문제풀이 (0) | 2022.02.14 |