Leetcode题目:Power of Four

题目:Given an integer (signed 32 bits), write a function to check whether it is a power of 4.

Example:
Given num = 16, return true. Given num = 5, return false.

Follow up: Could you solve it without loops/recursion?

需要注意的是,本题需要我们不使用循环或递归,因而很自然地想到了关于位操作的方法。

观察以下数列:

0 ---二进制--->    0     *

1 ---二进制--->    1

2 ---二进制--->    10

3 ---二进制--->    11

4 ---二进制--->    100     *

5 ---二进制--->    101

6 ---二进制--->    110

7 ---二进制--->    111

8 ---二进制--->    1000     *    

9 ---二进制--->    1001

10 ---二进制--->    1010

11 ---二进制--->    1011

12 ---二进制--->    1100

13 ---二进制--->    1101

14 ---二进制--->    1110

15 ---二进制--->    1111

16 ---二进制--->    10000     *

可以发现,所有是4的倍数的数字,它们的二进制都仅有一个1,剩余都是0。并且,需要注意的是,这些1都是在奇数为分布。

根据以上条件,可以给出如下的代码:

class Solution {
public:
    bool isPowerOfFour(int num) {
        int num_minus = num - 1;
        if((num & num_minus) == 0)
        {
            if((num & 0x55555555) != 0)
            {
                return true;
            }
        }
        return false;
    }
};

原文地址:https://www.cnblogs.com/CodingGirl121/p/5408444.html