4的幂

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

示例 1:

1
2
输入: 16
输出: true

示例 2:

1
2
输入: 5
输出: false

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

代码

循环

1
2
3
4
5
6
7
8
public boolean isPowerOfFour(int num) {
if (num < 1) return false;
while (num > 1) {
if (num % 4 != 0) return false;
num /= 4;
}
return true;
}

递归

1
2
3
4
5
public boolean isPowerOfFour(int num) {
if (num == 1) return true;
if (num < 1 || num % 4 != 0) return false;
else return isPowerOfFour(num / 4);
}

进阶

  1. 3的幂中有提到过的正则
  2. IntegerbitCount(int i)方法判断2的幂,再用i%3==1或者(0x55555555 & num) == num来判断
  3. 写死,int范围内4的幂的个数有16个,性能相较于3的幂有些许提升