O(1) Check Power of 2

Question

Using O(1) time to check whether an integer n is a power of 2.

Thoughts

因为要O(1),所以不要用module 2的方法来判断 可以用2的power的特性来判断

2的power在二进制中的表示为 100000....00 只有一位为0,可以从这个特性入手,但是如果找到这个1 shift的话也不是O(1) 可以看到比这个数小1的数为01111....111111 bit运算可以有&, ^, >, | 这里如果将两个数 &, 就会是0,并且对所有2的power通过

利用这个特性来判断,就可以达到constant time

Solution

class Solution:
    """
    @param n: An integer
    @return: True or false
    """
    def checkPowerOf2(self, n):
        # write your code here
        if n <= 0:
            return False
        preN = n - 1
        x = n & preN
        return x == 0