给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶: 你能不使用循环或者递归来完成本题吗?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/power-of-four 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
相关题目:LeetCode 231. 2的幂 && LeetCode 338. 比特位计数(2进制1的个数)
class Solution {
public:
bool isPowerOfFour(int n) {
if(n < 1)
return false;
while(n%4 == 0)
n /= 4;
return n == 1;
}
};
十进制 | 二进制 |
---|---|
40 = 1 | 1 |
41 = 4 | 100 |
42 = 16 | 1 0000 |
43 = 64 | 100 0000 |
发现4的整数次幂:只有一个1(跟2的整数次幂一致),且1在奇数位
在C/C++ 三种进制前缀:
设计一个只在奇数位或者只在偶数位为1的二进制数,进行位运算判断
class Solution {
public:
bool isPowerOfFour(int n) {
if(n < 1)
return false;
int k = 0b10101010101010101010101010101010;//32位
if((n&(n-1)) != 0)//先判断是否为2的幂,只有一个bit为1
return false;
if((n&k) == 0)
return true;
return false;
}
};
or
class Solution {
public:
bool isPowerOfFour(int n) {
if(n < 1)
return false;
int k = 0b01010101010101010101010101010101;
if((n&(n-1)) != 0)//先判断是否为2的幂,只有一个bit为1
return false;
if((n&k) == n)
return true;
return false;
}
};
如果图方便,可以记住那个魔法数字,不过感觉没必要,记住二进制形式就好了