📅  最后修改于: 2023-12-03 15:12:46.480000             🧑  作者: Mango
给定一个正整数n,写出一个函数来判断它是不是2的幂。
def is_power_of_two(n: int) -> bool:
pass
>>> is_power_of_two(1)
True
>>> is_power_of_two(16)
True
>>> is_power_of_two(3)
False
>>> is_power_of_two(0)
False
如果一个数是2的幂,那么它的二进制表示中只有一位是1。例如,2的1次幂为 10,2的2次幂为100,2的3次幂为1000,以此类推。所以,可以通过判断二进制表示中1的个数是否等于1来判断一个数是否为2的幂。
另外,我们可以发现,2的幂的二进制表示中,最高位为1,其余位均为0。如果对其减1,则所有位均为1,这样两个数进行与运算的结果一定为0。例如,4的二进制表示为100,4-1=3,3的二进制表示为011,两者进行与运算的结果为000。因此,我们可以通过n&(n-1)的结果是否为0来判断n是否为2的幂。
def is_power_of_two(n: int) -> bool:
if n <= 0:
return False
return n & (n - 1) == 0
以上就是本题的解题思路和解题代码。