题目链接:https://leetcode-cn.com/problems/power-of-two/
难度:简单
描述:
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。
题解
命题:的充要条件是
n & (n - 1) = 0。
证明:
:
- 当
k = 0,即n = 1时上述等式成立。 - 当
k > 0时,把n看成是二进制数,那么n = 10...0,n的从右起第k位是0,第k+1位是1。则n - 1 = 11...1所有k位数字都是1,那么n & (n - 1) = 0时显然的。
- 当
:
- 当
时,
是显然的,即
n和n - 1的第k+1位都是1,n & (n - 1) = 0不成立。 - 当
时,
n & (n - 1) = 0是显然的。 - 当
时,
n & (n - 1) = 0成立。
- 当
综上所述,命题成立。
class Solution:def isPowerOfTwo(self, n: int) -> bool:return n > 0 and n & (n - 1) == 0
