Skip to content

231. Power of Two

#255

Problem link

https://leetcode.com/problems/power-of-two

Problem Summary

n이 주어질 때 2의 제곱 (2^x) 인지 판단하는 문제.

Solution

단순 반복문은 너무 쉬우니 follow up 방식으로 해보자.
비트 연산을 쓰면 된다.

2의 제곱이라는 것은 비트로 나타냈을 때 ...0001000... 이런 꼴로 나오는 수인데 1을 뺐을 때 ...0000111... 처럼 1 자리 뒤가 전부 1로 바뀐다. 이 성질을 이용하면 n & (n - 1) == 0 이 나오는 수가 2의 제곱이다.
참고로 0 이하는 2의 제곱 꼴이 아니므로 걸러줘야 한다.

Source Code

class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        if n <= 0:
            return False
        return n & (n - 1) == 0