一、题目

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

如果存在一个整数 x 使得 n == 2 ,则认为 n 是 2 的幂次方。

点击查看原题

二、思路

1)位移判断

由于2的幂次方的数字,其二进制一定只有一位1,进行移位判断,当最低位为1且数字不等于1,则有其他位。不满足题意。

2)减一判断

根据上面的思路,由于num二进制只有一位1,那么(num-1)&num一定为零,不为零就不是2的幂次方。

三、代码

1)位移判断

  1. class Solution {
  2. public boolean isPowerOfTwo(int n) {
  3. if (n <= 0) {
  4. return false;
  5. }
  6. for (int i = 0; i < 32; i++) {
  7. if ((n & 1) == 1 && n != 1) {
  8. return false;
  9. }
  10. n = n >> 1;
  11. }
  12. return true;
  13. }
  14. }

n=32,时间复杂度为O(n),空间复杂度为O(1)。

2)减一判断

  1. class Solution {
  2. public boolean isPowerOfTwo(int n) {
  3. return ((n > 0) && (((n-1)&n) == 0));
  4. }
  5. }

时间复杂度为O(1),空间复杂度为O(1)。