参考链接
- https://leetcode-cn.com/problems/power-of-four/
- https://leetcode-cn.com/problems/power-of-four/solution/4de-mi-by-leetcode-solution-b3ya/
题目描述
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x
解题思路
4的幂和2的幂一样,二进制表示中只有一位为1,且只有奇数位为1,所以可以逐位判断是否为1。
如果不用循环,可以先判断是否为2的幂,再与(10101010101010101010101010101010)相与,如果为0,则为4的幂。
代码
朴素解法
class Solution {
public:
bool isPowerOfFour(int n) {
int sum = 0;
for(int i = 0; i < 31; i ++)
{
if (!(i & 1))
{
sum += (n >> i) & 1;
}
else if (((n >> i) & 1) == 1)
{
return false;
}
}
return n > 0 && sum == 1;
}
};
进阶
class Solution {
public:
bool isPowerOfFour(int n) {
return n > 0 && (n & (n - 1)) == 0 && (n & 0xaaaaaaaa) == 0;
}
};