方法一:位运算
思想:根据题目,相当于n的二进制中只有一个1,且n为正数时,符合条件
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n > 0 and n & (n -1) == 0
方法二:位运算(技巧)
思想:利用n & (-n) == n时,n中只有一个1这个特性
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n >0 and n & (-n) == n #利用n与-n相“与”为n,n中有1个1这个特性
方法三:
思想:利用有符号数,最高位为2 ** 30,若n为2 ** 30 的约数,则n符合条件
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
big = 2 ** 30
return n > 0 and big % n == 0