📜  门|门 IT 2006 |第 45 题(1)

📅  最后修改于: 2023-12-03 15:12:46.480000             🧑  作者: Mango

门|门 IT 2006 |第 45 题

题目描述

给定一个正整数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

以上就是本题的解题思路和解题代码。