题目链接:https://leetcode-cn.com/problems/power-of-two/
难度:简单

描述:
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false

题解

命题:231. 2 的幂 - 图1的充要条件是n & (n - 1) = 0
证明:

  • 231. 2 的幂 - 图2
    • k = 0,即n = 1时上述等式成立。
    • k > 0时,把n看成是二进制数,那么n = 10...0n的从右起第k位是0,第k+1位是1。则n - 1 = 11...1所有k位数字都是1,那么n & (n - 1) = 0时显然的。
  • 231. 2 的幂 - 图3
    • 231. 2 的幂 - 图4时,231. 2 的幂 - 图5是显然的,即nn - 1的第k+1位都是1n & (n - 1) = 0不成立。
    • 231. 2 的幂 - 图6时,n & (n - 1) = 0是显然的。
    • 231. 2 的幂 - 图7时,n & (n - 1) = 0成立。

综上所述,命题成立。

  1. class Solution:
  2. def isPowerOfTwo(self, n: int) -> bool:
  3. return n > 0 and n & (n - 1) == 0