leetcode_Power of Four

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/alw_123/article/details/79703889

问题描述

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?

Credits:
Special thanks to @yukuairoy for adding this problem and creating all test cases.

思路

2的幂包含了4的幂,也就是说4的幂一定是2的幂但2的幂不一定是4的幂。那么不妨先计算一下输入是不是2的幂,当是2的幂的时候再判断是不是4的幂。

要判断输入是不是2的幂很简单,只要判断输入的二进制形式中是不是只有1个1即可。即假设输入是n,如果n&(n-1)==0,则n就是2的幂。

那么怎么判断是不是4的幂呢?举个栗子。2和8的二进制码是(0010)和(1000)这两个数都是2的幂但不是4的幂。而4和16的二进制码是(0100)和(10000)。可以发现一个规律,4的幂的二进制码中的1会出现在奇数位上(从右往左数),而非4的幂的二进制码中的1会出现在偶数位上。也就是说如果1出现在奇数位上时为4的幂。为了判断,可以引入一个掩码(1010101010101010101010101010101)也就是0x55555555。然后n和这个掩码按位与,如果结果非0,就是4的幂。

实现

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

猜你喜欢

转载自blog.csdn.net/alw_123/article/details/79703889