一、题目
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x
二、代码
1. 解法1(常规)
class Solution {
public:
bool isPowerOfFour(int n) {
while(n>=4&&n%4==0){
n/=4;
}
return n==1;
}
};
思路:
- 简单的循环并判断取模是否为0即可
2. 解法2(位运算)
class Solution {
public:
bool isPowerOfFour(int n) {
return n>=1&&(n&(n-1))==0&&(n&0xaaaaaaaa)==0;
}
};
思路:
- 首先判断是否是2的幂(减少时间),用n&(n-1)==0判断:n&(n-1)表示将n的最后一个是1的位变为0,如果是2的幂,则此数就是0
- 判断是4的幂:
4的幂有一个特点:只有一个位是1,并且这个位是0,2,4,8(偶数位)。那么将这个数和 101010 … ( 2 ) = 0 x A A A A A A A A 101010\dots_{(2)}=0x AAAAAAAA 101010…(2)=0xAAAAAAAA做 与运算(&)即可得到结果