给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:

输入: 16
输出: true

示例 2:

输入: 5
输出: false

进阶:
你能不使用循环或者递归来完成本题吗?

这题本质上还是一个数学问题,考察的是二进制的一些操作。因为4的幂一定是2的幂,且二进制后,其1的位置一定出现在奇数位。

如 4: 0100   16:10000

所以思路很清晰了。首先判断是不是2的幂,然后再判断其1的位置是不是在奇数位。判断的方法是将这个数与 0x55555555 相与 。这样奇数位上一旦有1 ,结果必为非零。

当然这种比较取巧的方法我是看了评论区才知道的。一般的做法是用移位来逐个判断,类似。

代码如下:

class Solution {
public boolean isPowerOfFour(int num) {
if (num<0 || (num & (num-1))!=0)
return false;
int i=(num & 0x55555555);
System.out.println(i);
return i>1;
}
}
05-21 11:06