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